如何使用xterm在另一个终端中生成进程?

时间:2013-01-17 13:41:50

标签: linux bash shell

在我的bash脚本中,我尝试使用以下命令在另一个终端窗口中运行进程:

xterm -e /home/mohit/a.out

现在我想使用tee命令重定向输出,如下所示:

xterm -e /home/mohit/a.out 2>&1 | tee logfile

但我在logfile没有得到任何东西。任何线索,为什么会发生这种情况?

2 个答案:

答案 0 :(得分:4)

看起来xterm会生成一个新窗口并在该窗口中执行-e。一旦该命令完成就退出。

因为它是在一个新的shell中打开的,所以它的stderr stdout等附加到那个窗口。

如果你想要的是打开那个窗口并保持打开日志文件你需要引用你想要由xterm执行的所有内容,否则bash将解释重定向和管道本身。例如

xterm -e /home/mohit/a.out 2>&1 | tee logfile

将由bash翻译成:

使用xterm执行命令/home/mohit/a.out 然后将stderr重定向到stdout并管道进入tee。

由于xterm会产生新的stdout等新窗口,因此tee没有得到任何输入,因此在logfile中没有任何内容

尝试

xterm -e '/home/mohit/a.out 2>&1 | tee logfile'

将强制xterm执行整个pipeling

答案 1 :(得分:1)

@peteches已经展示了如何通过将整个命令行提供给-e来捕获输出。

您还可以要求xterm使用-l

将所有输出捕获到日志文件中
xterm -l -e /home/mohit/a.out

会记录到名为XtermLog.XXXXXXXterm.log.hostname.yyyy.mm.dd.hh.mm.ss.XXXXXX

的文件

您可以使用-lf

指定日志文件
xterm -l -lf logfile -e /home/mohit/a.out

缺点是,这不适用于现有文件。在xterm将使用它之前,您必须删除logfile