在我的 bash 脚本中,我尝试使用以下命令在另一个终端窗口中运行一个进程:
xterm -e /home/mohit/a.out
现在我想使用tee
如下命令重定向输出:
xterm -e /home/mohit/a.out 2>&1 | tee logfile
但我没有得到任何东西logfile
。任何线索,为什么会这样?
看起来 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 执行整个管道
@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 使用它之前,您必须删除它。