返回$?

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

492419 次浏览

它没有特殊的含义,只是最后一个要退出的进程的退出状态是127。

然而,bash也使用它(假设您将bash用作shell)来告诉您尝试执行的命令无法执行(即无法找到它)。不幸的是,如果进程以状态127退出,或者如果它找不到,则不能立即推断。

< p >编辑:< br > 不能立即推断,除了控制台的输出,但这是堆栈溢出,所以我假设您在脚本中执行此操作

当给定的命令不在你的PATH系统变量中并且它不是内置的shell命令时,值127由/bin/sh返回。换句话说,系统不理解您的命令,因为它不知道在哪里找到您试图调用的二进制文件。

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

   For  the shell’s purposes, a command which exits with a zero exit status has succeeded.  An exit status
of zero indicates success.  A non-zero exit status indicates failure.  When a command terminates  on  a
fatal signal N, bash uses the value of 128+N as the exit status.
   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.

127 - command not found

< p >例子:caat美元 错误消息将

bash:

Caat:命令未找到

现在你使用echo $?检查

一般的意思是:

127 -命令未找到

但它也可以表示命令被发现
. bb0 但是未找到命令需要一个库

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

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

这种错误有时也具有欺骗性。它说文件没有找到,即使文件确实存在。这可能是因为文件中存在无效的不可读的特殊字符,这可能是由您正在使用的编辑器引起的。在这种情况下,这个链接可能会对您有所帮助。

-bash: ./my_script: /bin/bash^M: bad interpreter: No such file or directory< a> . bat: ./my_script: /bin/bash

找出是否是这个问题的最好方法是在整个文件中放置一个echo语句,并验证是否抛出了相同的错误。

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

除了给出的答案外,请注意,如果您使用/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退出码,这与关于bashgnu.org文档一致:

如果没有找到命令,为执行该命令而创建的子进程将返回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
  1. 请登录C:\Program Files\Git\etc
  2. 用记事本打开gitconfig
  3. <李>改变 (核心) 独裁者= true 来 (核心) selflf = false