什么是$?在尝试在Bourne shell中执行无效命令后立即意味着什么?

时间:2016-03-05 07:18:29

标签: shell sh

我知道$?表示最后执行的命令的返回值。我很好奇;如果命令无效,那么$?会是什么?

那是127。这是什么意思?为什么是127

> echo a
a
> echo $?
0
> invalidcommandasdf
invalidcommandasdf: not found
> echo $?
127

The Bourne shell

3 个答案:

答案 0 :(得分:1)

$?给出上次执行的命令/进程的存在状态代码。 127状态代码表示未找到命令

了解更多详情:bash-shell-exit-status/

答案 1 :(得分:1)

" $?"的主要用途是检查上次运行命令是否具有退出值true或false。您将获得输出' 0'或者' 1'在哪里' 0'如果最后一次运行命令为真,则返回' 1'如果是假的。

对于未知命令,您将获得如您所示的输出。 你可以通过简单地使用随机字符串(sajdgh / uytwegf)作为无法识别的命令来尝试这一点,你可以看到你获得了不同的输出。

但是,此命令的主要用途是检查上次使用的命令的逻辑状态。消防并查看" echo $?"的输出将是' 0' 0现在只想尝试cat unknown.txt' (考虑到你实际上没有名为' unknown.txt'的文件),你将获得输出' 1'

答案 2 :(得分:1)

退出状态具有双重功能:它可能会从程序返回信息,但它也可能会从运行程序中返回有关程序如何退出的信息。虽然理论上程序可以有0到255范围内的任何退出代码,但是其中许多代码被POSIX标准赋予特殊含义,并且不能供程序本身使用。

例如,

126和127供运行该命令的shell(或其他命令运行程序)使用。 127表示找不到命令,126表示命令已找到,但不可执行。

任何大于128的退出状态表示程序由于信号而退出:由于信号1而由于信号1而退出时为129,等等。通常,128 + k表示由于信号k而退出。 / p>

(我不确定128本身是否特别为某些东西保留。)

实际上,这意味着你的命令不应该明确使用大于125的任何退出代码。这通常不应该是一个问题;大多数命令不需要区分125个不同的错误(0,当然,意味着它会毫无错误地退出。)curl是一个使用 lot 的程序的示例不同的代码,但即使它只使用1到90之间可用值的大多数