重定向可执行文件创建的文件中的所有内容?

时间:2010-12-09 16:26:49

标签: linux bash redirect

我有一堆可执行文件,我想将每个文件的输出存储在一个单独的文件中。

为此目的,我使用以下命令,但"2>&1"每次都不起作用。有时候输出文件仍然是空的,即使从shell运行时脚本会在shell中打印东西。

我应该使用什么而不是2>&1

./$file 2>&1 | tee "$outputFile" 

3 个答案:

答案 0 :(得分:3)

有些可执行文件不只是写入stdout和stderr,而是打开/ dev / tty并写入。

因此,为了重定向那些,有必要做一个涉及伪的tty的更复杂的过程。有关可以执行此操作的内容,请参阅命令script

答案 1 :(得分:2)

如果要同时捕获stdout和stderr:

./$file > $outputfile 2>&1

但是,某些程序是智能的,并检测其输出被重定向到哪种类型的终端。如果将它发送到文件,它们可能会生成不同的输出...

答案 2 :(得分:2)

只是详细说明Darron的答案,您可以使用script命令捕获所有输出。这是一个使用python脚本写入stdout,stderr和/ dev / tty的示例,并捕获所有三个输出:

brent@battlecruiser:~$ cat test.py
import sys
sys.stdout.write('o\n')
sys.stderr.write('e\n')
with open('/dev/tty', 'w') as tty:
    tty.write('t\n')
brent@battlecruiser:~$ script testout
Script started, file is testout
brent@battlecruiser:~$ python test.py
o
e
t
brent@battlecruiser:~$ exit
Script done, file is testout
brent@battlecruiser:~$ head -n -3 testout | tail -n +3
o
e
t

将此与使用2>1&tee

时发生的情况进行对比
brent@battlecruiser:~$ python test.py 2>&1 | tee testout
e
t
o
brent@battlecruiser:~$ cat testout
e
o

如您所见,未捕获对/dev/tty的写入。尝试在script命令中执行命令,如图所示,看看它是否捕获了所有结果。