如何理解shell重定向2>&1

重定向命令

command > log.txt
command 2>&1
command > log.txt 2>&1

符号解释

这里的&没有固定的意思
&连接的字符不能有空格
放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符,内置的文件描述符如下

1 => stdout
2 => stderr
0 => stdin

命令1

command > log.txt

等价于 command &1>log.txt,所以标准错误还是会输出到屏幕。

命令2

command 2>&1

标准错误被重定向到标准输出,无论是标准错误还是标准输出都作标准输出处理,因为命令只有成功或失败。

命令3

command > log.txt 2>&1
# 等价于
command &>log.txt

命令从左执行,分两部分理解:

  1. >log.txt 标准输出stdout重定向到log.txt文件,意思是说log.txt表示为stdout。

  2. 标准错误stderr重定向到标准输出stdout,而stdout被表示为log.txt,所以这里的stdout指的是log.txt。

综上,无论是命令报错还是正常输出,其内容都会写入到log.txt

扩展

可以利用shell重定向在php变量中接收命令输出的内容,以判断命令执行结果。


如何理解shell重定向2>&1
http://blog.icy8.cn/posts/59179/
作者
icy8
发布于
2022年4月25日
许可协议