0

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

xterm -e /home/mohit/a.out

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

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

但我没有得到任何东西logfile。任何线索,为什么会这样?

4

2 回答 2

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 使用新的标准输出等生成新窗口。 tee 没有得到任何输入,因此日志文件中没有任何内容

尝试

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

这将迫使 xterm 执行整个管道

于 2013-01-17T14:02:12.290 回答
1

@peteches 已经展示了如何通过将整个命令行提供给-e.

您还可以要求xterm将所有输出捕获到日志文件中-l

xterm -l -e /home/mohit/a.out

它记录到一个名为XtermLog.XXXXXX或的文件中Xterm.log.hostname.yyyy.mm.dd.hh.mm.ss.XXXXXX

您可以指定日志文件-lf

xterm -l -lf logfile -e /home/mohit/a.out

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

于 2013-01-17T14:46:39.463 回答