我有一个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
答案 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