这个节目的STDOUT有一种奇怪的行为。
如果我执行该程序:
./steam -command update -game "Counter-Strike Source" -dir .
输出下一个:
Checking bootstrapper version ...
Updating Installation
Determining which depot(s) to install/update...
5 depot(s) will be installed/updated
0:02 Checking local files and building download list for depot 242 'Counter-Strike Source Shared' version 129
0:02 Connecting content server session for version 129
0:03 [80.239.194.162:27030] Connecting...
0:06 [80.239.194.162:27030] Failed. Failed to connect to 80.239.194.162:27030, errno 115 "Operation now in progress"
0:06 [81.171.68.195:27030] Connecting...
0:07 [81.171.68.195:27030] Connection established; handshaking...
0:08 [81.171.68.195:27030] Sending login message...
0:08 Fetching version 129 manifest
...
出于任何奇怪的原因,如果我使用管道和T恤将其记录到文件中:./steam -command update -game "Counter-Strike Source" -dir . | tee log
输出该程序的唯一方法是:
Checking bootstrapper version ...
Updating Installation
Determining which depot(s) to install/update...
5 depot(s) will be installed/updated
仅此而已。相同的文本位于日志文件和屏幕上。程序仍然开始更新文件。知道为什么会这样吗?
注意:缺少的行不是来自STDERR
注2:./ steam不会创建任何子项或额外进程
答案 0 :(得分:2)
我猜程序正在检查isatty(3)
以决定是否显示进度输出。如果是这种情况,那么如果你把它捕获到文件中,你可能不会得到非常合理的输出,因为它可能使用各种控制字符来使输出更加人性化。
通过运行以下命令连接到TTY时,您可以尝试捕获程序的输出:
script -c "./steam -command update ..." logfile
答案 1 :(得分:1)
tee
具有双重目的 - 它从标准输入读取并将输出写入指定文件及其标准输出。因此,您最终会看到所有写入终端日志文件的内容,因为没有任何内容可以“吸收”tee
的输出。
如果您只想将所有输出写入文件,请改用输出重定向:
./steam [args...] >> log
包含标准错误:
./steam [args...] 2>&1 >> log