Bash “ls”怎么说*&引用;2>&;1 | tee ls.txt`工作?

Bash “ls”怎么说*&引用;2>&;1 | tee ls.txt`工作?,bash,tee,Bash,Tee,我正在寻找一种方法将所有输出保存到一个文件并打印出来 下面这样的命令确实非常有效 ls“*”2>&1| tee ls.txt 但我想我不太明白 我尝试了ls“*”| teels.txt。它不起作用。错误消息未保存到ls.txt中 我还尝试了ls“*”1>&2 | teels.txt。它表现得有些奇怪。发生了什么事?2>&1说“将stderr(2)重定向到stdout(1)去的任何地方”1和2分别是stdout和stderr的文件描述符 当您通过管道将ls输出传输到tee时,只有stdout进入t

我正在寻找一种方法将所有输出保存到一个文件并打印出来

下面这样的命令确实非常有效

ls“*”2>&1| tee ls.txt

但我想我不太明白

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

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

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

当您通过管道将
ls
输出传输到
tee
时,只有stdout进入
tee
(无
2>&1
)。因此,错误消息不会保存到
ls.txt

,您可以实际使用:

ls "*" |& tee ls.txt
通过管道将标准输出和标准输出传输到
tee
命令

ls'*'
实际上正在尝试列出名为
*
的文件,因为
'*'
在引号中

你的命令:

ls '*' 2>&1 | tee out

工作原理是,首先将stderr(2)重定向到stdout(1),然后使用管道连接到T形三通,如l3x所述,您将“标准错误:2”重定向到“标准输出:1”。 解决方案是在实际错误发生之前触发重定向。因此,与其使用

ls“*”2>&1| tee ls.txt

你应该使用

ls 2>&1“*”| tee ls.txt

这样,“标准错误”将不会为空,并将被重定向到“标准输出”,tee将工作,因为“标准输出”不会为空。 我已经测试过了,它可以工作了。 我希望这是有帮助的

ls“*”&tee ls.txt
在我的mac上不起作用<代码>-bash:意外标记“&”附近出现语法错误