此命令不会将我的脚本的输出存储在日志文件中:
. myscript.sh | tee -a log_file.log
然而下一个命令做将输出存储在日志文件中。
. myscript.sh 2>&1 | tee -a dash_log.log
为什么第二个有效而第一个无效? AFAIK 唯一的区别是我已经告诉 bash 将 stderr 重定向到 stdout,并且它不应该对 stdout 发生的情况产生任何影响。然而,第一个命令甚至不会将标准输出的“无错误”版本存储在日志文件中。
如果重要的话:我使用的是 AWS 上托管的 Ubuntu 12.04
编辑:这是由于对 wget 如何输出消息的错误假设造成的。看https://stackoverflow.com/questions/13066518/why-does-wget-output-to-stderr-rather-than-stdout和http://www.gnu.org/software/wget/manual/html_node/Logging-and-Input-File-Options.html
答案1
您的脚本似乎正在将大部分或全部输出写入 stderr。这很容易测试
myscript.sh > std.out
myscript.sh 2> err.out
然后查看每个文件的内容并接受教育。
我对此表示怀疑 - 脚本的唯一输出来自对 wget 的调用
不要怀疑,这很容易测试
$ wget http://serverfault.com >std.out
--2013-09-09 07:06:25-- http://serverfault.com/
Resolving serverfault.com... 198.252.206.16
Connecting to serverfault.com|198.252.206.16|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51867 (51K) [text/html]
Saving to: “index.html.6”
100%[=================================================>] 51,867 231K/s in 0.2s
2013-09-09 07:06:26 (231 KB/s) - “index.html.6” saved [51867/51867]
看,输出仍然被写入终端,然后尝试
$ wget http://serverfault.com 2>err.out
$
量子电动力学
wget 命令将其输出写入 stderr 而不是 stdout。
答案2
可能需要查看代码,但这可能是由于您的代码写入了 stderr。