2024-01-02 07:00:00

返回$?

从$返回值127是什么意思?在UNIX中。


当前回答

shell惯例是,一个成功的可执行文件应该以值0退出。其他任何事情都可以解释为bash或您刚刚运行的可执行文件的某些部分出现了某种失败。参见bash手册页的$PIPESTATUS和EXIT STATUS部分:

对于shell而言,退出状态为零的命令已经成功。退出状态 为零表示成功。非零退出状态表示失败。上的命令终止时 致命信号N, bash使用128+N的值作为退出状态。

   If  a command is not found, the child process created to execute it returns a status of 127.  If a com-
   mand is found but is not executable, the return status is 126.

   If a command fails because of an error during expansion or redirection, the exit status is greater than
   zero.

   Shell  builtin  commands  return  a  status of 0 (true) if successful, and non-zero (false) if an error
   occurs while they execute.  All builtins return an exit status of 2 to indicate incorrect usage.

   Bash itself returns the exit status of the last command executed, unless  a  syntax  error  occurs,  in
   which case it exits with a non-zero value.  See also the exit builtin command below.

其他回答

如果IBM大型机JCL在被调用的unix脚本的名称后面有一些额外的字符或数字,那么它就会抛出这样的错误。

一般的意思是:

127 -命令未找到

但它也可以表示找到了命令, 但是没有找到命令所需要的库。

请登录C:\Program Files\Git\etc 用记事本打开gitconfig 改变 (核心) 独裁者= true 来 (核心) 独裁者= false

除了给出的答案之外,请注意,如果您使用/bin/sh作为shell,那么运行带有错误行尾字符的脚本文件还可能导致127个退出码。

例如,如果你在基于unix的系统和/bin/sh shell中运行一个带有CRLF行尾字符的shell脚本,那么在运行名为my_test.sh的脚本后,可能会遇到如下错误:

$ ./my_test.sh
sh: 2: ./my_test.sh: not found
$ echo $?
127

注意,使用/bin/bash,我得到了126退出码,这与gnu.org关于bash的文档一致:

如果没有找到某个命令,为执行该命令而创建的子进程将返回127的状态。如果找到了不能执行的命令,则返回状态为126。

最后,下面是在/bin/bash中运行脚本的结果:

arman@Debian-1100:~$ ./my_test.sh
-bash: ./my_test.sh: /bin/bash^M: bad interpreter: No such file or directory
arman@Debian-1100:~$ echo $?
126

如果试图使用脚本语言运行程序,则可能需要包含脚本语言的完整路径和要执行的文件。例如:

exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');