在Bash
shell 中,我可以通过变量获取命令退出状态$?
:
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
它只能在 Bash shell 中使用吗?或者我也可以在其他 shell 中使用它吗?
答案1
退出代码$?
对于任何遵循 POSIX 的 shell 都是通用的,并且在2.5.2 特殊参数:
?
扩展到最近管道的十进制退出状态(请参阅管道)。
答案2
正如 Thomas Dickey 所说,任何 POSIX shell(即几乎所有 shell)都会有$?
.
这个问题让我很感兴趣,所以我在任何我能拿到的 shell 上测试了它:
mksh
zsh
/bin/sh
在我的三星 Galaxy S5 上/bin/sh
在我的路由器上tcsh
ksh
dash
/bin/sh
在我的 1989 年左右的虚拟 UNIX System V 上cmd.exe
在powershell.exe
我的 Windows 10 电脑上
并$?
在所有这些方面都工作过,但是fish
和cmd.exe
。
发现两个有趣的事情:
1.$?
在 Windows PowerShell 中工作!
好吧,在某种程度上。它不返回 0 或更大的数字,而是返回True
和False
。
PS C:\WINDOWS\system32> echo $?
True
PS C:\WINDOWS\system32> gfdhgfhfdgfdg
gfdhgfhfdgfdg : The term 'gfdhgfhfdgfdg' is not recognized as the name of a cmdlet, ...(big long error output).....
PS C:\WINDOWS\system32> echo $?
False
2.$?
在shell中不起作用fish
。
但是,当您输入$?
“fish”时,您会收到以下消息:
~$ echo $?
$? is not the exit status. In fish, please use $status.
fish: echo $?
我没怎么用过它,但我并不感到惊讶,fish
似乎有它自己有趣的 shell 语言,完全不同于bash
或其他什么。