`ls "*" 2>&1 | 怎么办? tee ls.txt` 工作?
how does `ls "*" 2>&1 | tee ls.txt` work?
我正在寻找一种将所有输出保存到文件并打印的方法。
像下面这样的命令确实可以完美运行!
ls "*" 2>&1 | tee ls.txt
但是我觉得我理解的不是很好
我试过了ls "*" | tee ls.txt
。它不起作用。错误消息未保存到 ls.txt
.
我也试过了ls "*" 1>&2 | tee ls.txt
。它表现得有些奇怪。发生什么事了?
2>&1
表示 "redirect stderr (2) to wherever stdout (1) goes"。 1
和2
分别是stdout
和stderr
的文件描述符。
当您将 ls
输出通过管道传输到 tee
时,只有标准输出会转到 tee
(没有 2>&1
)。因此,错误消息不会保存到 ls.txt
.
你实际可以使用:
ls "*" |& tee ls.txt
将 stdout 和 stderr 通过管道传输到 tee
命令。
ls '*'
实际上是在尝试列出名称为 *
的文件,因为 '*'
在引号内。
你的命令:
ls '*' 2>&1 | tee out
首先将 stderr(2) 重定向到 stdout(1),然后使用管道到 tee
如 l3x 所述,您正在将 "standard error: 2" 重定向到 "standard output: 1"。
解决方案是在实际错误发生之前触发重定向。所以不用
ls "*" 2>&1 | tee ls.txt
你应该使用
ls 2>&1 "*" | tee ls.txt
这样 "standard error" 就不会为空,并且会被重定向到 "standard output" 并且 T 恤会起作用,因为 "standard output" 不会为空。
我已经测试过它并且有效。
希望对您有所帮助
我正在寻找一种将所有输出保存到文件并打印的方法。
像下面这样的命令确实可以完美运行!
ls "*" 2>&1 | tee ls.txt
但是我觉得我理解的不是很好
我试过了ls "*" | tee ls.txt
。它不起作用。错误消息未保存到 ls.txt
.
我也试过了ls "*" 1>&2 | tee ls.txt
。它表现得有些奇怪。发生什么事了?
2>&1
表示 "redirect stderr (2) to wherever stdout (1) goes"。 1
和2
分别是stdout
和stderr
的文件描述符。
当您将 ls
输出通过管道传输到 tee
时,只有标准输出会转到 tee
(没有 2>&1
)。因此,错误消息不会保存到 ls.txt
.
你实际可以使用:
ls "*" |& tee ls.txt
将 stdout 和 stderr 通过管道传输到 tee
命令。
ls '*'
实际上是在尝试列出名称为 *
的文件,因为 '*'
在引号内。
你的命令:
ls '*' 2>&1 | tee out
首先将 stderr(2) 重定向到 stdout(1),然后使用管道到 tee
如 l3x 所述,您正在将 "standard error: 2" 重定向到 "standard output: 1"。 解决方案是在实际错误发生之前触发重定向。所以不用
ls "*" 2>&1 | tee ls.txt
你应该使用
ls 2>&1 "*" | tee ls.txt
这样 "standard error" 就不会为空,并且会被重定向到 "standard output" 并且 T 恤会起作用,因为 "standard output" 不会为空。 我已经测试过它并且有效。 希望对您有所帮助