当找不到命令时,bash` $?`返回0,而不是127

时间:2017-04-12 12:06:29

标签: bash

我有一个shell脚本文件,我检查$?为0判断脚本是否成功运行。

当脚本有错误命令时,它会运行失败,我认为它将退出127,但如果我使用bash -l它仍然返回0,这使我不知道有成功运行或命令没有找到。如果没有-l则返回127

有我的演示:

[root@T /tmp]# cat _script.sh
no_such_cmd
[root@T /tmp]# bash _script.sh
_script.sh: line 1: no_such_cmd: command not found
[root@T /tmp]# echo $?
127
[root@T /tmp]# bash -l _script.sh
no_such_cmd : command not found
[root@T /tmp]# echo $?
0
[root@T /tmp]# no_such_cmd
no_such_cmd : command not found
[root@T /tmp]# echo $?
0
[root@T /tmp]# zsh
[root@T]/tmp# no_such_cmd
zsh: command not found: no_such_cmd
[root@T]/tmp# echo $?
127

3 个答案:

答案 0 :(得分:1)

我在detecting command not found in bash script

中阅读了@chepner的答案

并在第一行添加unset command_not_found_handle已解决问题

答案 1 :(得分:0)

一段代码有助于诊断。我正在运行一个非常旧版本的bash(3.2.25),我无法复制你的结果。

$ a
-bash: a: command not found
$ echo $?
127
$ bash --version
GNU bash, version 3.2.25(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

但如前所述,请先检查命令是否存在。 command -v可能就是您所追求的目标。

答案 2 :(得分:-1)

也许你可以在试图调用之前检查命令存在:Check if a program exists from a Bash script