shell中重定向会影响$?
时间: 2024-09-23 07:12:14 浏览: 31
Shell中重定向的深入讲解
在Shell中,`$?`变量通常表示上一条命令的退出状态(Exit Status)。当你对输出进行重定向时,这并不直接影响`$?`的值。然而,重定向会改变实际的输出行为,可能会影响到`$?`的观察。
1. 如果你将标准输出(`stdout`)和错误输出(`stderr`)合并重定向到文件[^1]:
```shell
command > file 2>&1
```
这里`2>&1`表示将错误输出重定向到与标准输出相同的目标,此时`command`的退出状态会被正确地反映在`$?`中,因为其返回值通常会通过这两个输出流传递。
2. 如果你将命令的输出重定向到 `/dev/null`,意味着你隐藏了输出:
```shell
command > /dev/null
```
此时`$?`的值仍然取决于`command`本身的退出状态,但由于输出被丢弃,你在终端上看不到它。尽管如此,`command`成功执行与否,其退出状态仍然是正确的。
所以,重定向操作本身不会影响`$?`的计算,但它可能会使你难以直接查看输出,从而间接影响你对命令运行情况的理解。要检查`$?`的实际值,最好是在没有重定向的情况下执行命令,或者查看重定向后的文件内容。
阅读全文