如何" *" 2>& 1 | tee ls.txt`工作?

时间:2015-08-21 04:54:49

标签: bash tee

我找到了一种方法将所有输出保存到文件并打印出来。

以下命令可以完美运行!

ls "*" 2>&1 | tee ls.txt

但我认为我不太了解它。

我尝试了ls "*" | tee ls.txt。它不起作用。错误消息未保存到ls.txt

我也尝试了ls "*" 1>&2 | tee ls.txt。它表现得有些奇怪。发生了什么事?

3 个答案:

答案 0 :(得分:2)

2>&1说“将stderr(2)重定向到stdout(1)去的地方”。 12分别是stdoutstderr的文件描述符。

当您将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

这样“标准错误”不会为空,并将被重定向到“标准输出”,并且发球台将起作用,因为“标准输出”不会为空。 我已经测试了它,它的工作原理。 我希望这很有用