bash,嵌套命令和重定向

时间:2012-01-25 22:24:08

标签: bash redirect command nested pipe

我正在尝试使用如下命令跟踪进程的CPU使用情况:

    top -b -d 1 | grep myprocess.exe

接下来,我想将其重定向到日志文件,例如

    top -b -d 1 | grep myprocess.exe > output.log

现在,这实际上不起作用,因为它认为我正在使用myprocess.exe> output.log 而不是myprocess.exe

有人知道如何让这种重定向工作吗?

2 个答案:

答案 0 :(得分:2)

  

现在,这实际上并不起作用,因为它认为我正在使用myprocess.exe > output.log而不是myprocess.exe

错误。一切都应该没问题。第一个示例执行将stdout设置为终端的管道(因此您可以看到输出,但没有任何内容写入文件)。第二个示例执行管道,stdout设置为output.log(因此您看不到输出,但它将在您的文件中正确)。

如果您希望将输出写入两者,则需要另一个进程将前一个管道的stdout作为stdin,并将其复制。像:

previous_pipeline | tee output.log

tee将在stdout上打印stdin上的内容(因此对于stdout,一切都与之前相同),但另外打开另一个文件(以cmdline arg的形式给出)和写一份副本。

答案 1 :(得分:1)

尝试tee

top -b -d 1 | grep myprocess.exe | tee output.log

如果您希望它不显示输出:

top -b -d 1 | grep myprocess.exe | tee output.log > /dev/null