127从$返回代码?


Answers:


427

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


55
如果bash脚本不具有模式“ + x”但确实存在,则也会发生这种情况。
MatthewKremer'3

3
您可以尝试使用which [program]查看操作系统使用的二进制文件。如果显示为空,则下一步是检查执行位和PATH。
four43 2014年

10
@ cr125rider which并不是特别准确-它不知道别名,shell函数,PATH查找记录或shell状态内部的其他因素。更好地使用type,它是内置shell的,它了解所有这些东西。
查尔斯·达菲

5
带有Windows换行符的文件也发生在我身上。将行尾更正为unix格式可解决问题
Mitkins 2014年

4
@MatthewKremer:实际上,我得到126Permission denied),而不是127当我尝试调用不可执行的文件时(无论其内容如何);同样,执行目录的尝试也会导致126is a directory)。
mklement0 2015年

58

通常,这意味着:

127-找不到命令

但它也可能意味着命令被发现
但被命令时所需的库中没有找到



10

Shell约定是,成功的可执行文件应以0值退出。在bash或您刚运行的可执行文件中,任何其他事情都可以解释为某种形式的失败。另请参见bash手册页的$ PIPESTATUSEXIT STATUS部分:

   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.

8

它没有特殊含义,除了最后一个退出过程是退出状态为127。

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

编辑:
除了控制台上的输出外,还不能立即推断出来,但这是堆栈溢出,因此我假设您正在脚本中执行此操作。


2

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

-bash:./my_script:/ bin / bash ^ M:错误的解释器:无此类文件或目录

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


1

如果您尝试使用脚本语言运行程序,则可能需要包括脚本语言的完整路径以及要执行的文件。例如:

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

谢谢,这对我有用。所以我做了哪个gs,然后在脚本中使用了输出路径。工作..
Juan

0

如果IBM大型机JCL在被调用的unix脚本名称的末尾有一些额外的字符或数字,则它可能会引发此类错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.