我找到了一种方法将所有输出保存到文件并打印出来。
以下命令可以完美运行!
ls "*" 2>&1 | tee ls.txt
但我认为我不太了解它。
我尝试了ls "*" | tee ls.txt
。它不起作用。错误消息未保存到ls.txt
。
我也尝试了ls "*" 1>&2 | tee ls.txt
。它表现得有些奇怪。发生了什么事?
答案 0 :(得分:2)
2>&1
说“将stderr(2)重定向到stdout(1)去的地方”。 1
和2
分别是stdout
和stderr
的文件描述符。
当您将ls
输出到tee
时,只有标准输出转到tee
(没有2>&1
)。因此,错误消息不会保存到ls.txt
。
答案 1 :(得分:0)
您实际上可以使用:
ls "*" |& tee ls.txt
将stdout和stderr都传递给tee
命令。
ls '*'
实际上是在尝试列出名称为*
的文件,因为'*'
位于引号内。
你的命令:
ls '*' 2>&1 | tee out
首先将stderr(2)重定向到stdout(1),然后使用管道到tee
答案 2 :(得分:0)
正如 l3x 所提到的,您将“标准错误:2”重定向到“标准输出:1”。 解决方案是在实际错误发生之前触发重定向。所以不要使用
ls "*" 2>&1 | tee ls.txt
你应该使用
ls 2>&1 "*" | tee ls.txt
这样“标准错误”不会为空,并将被重定向到“标准输出”,并且发球台将起作用,因为“标准输出”不会为空。 我已经测试了它,它的工作原理。 我希望这很有用