尝试使用简单脚本
测试命令是否存在$ cat test.sh
command -v nwef
echo $?
$ sh test.sh
127
$ ./test.sh
1
$ bash test.sh
1
在centos 6.5中,结果总是为1。
任何人都知道为什么“sh test.sh”与众不同?
答案 0 :(得分:3)
sh
是破折号,而不是bash。
答案 1 :(得分:2)
退出状态的差异在于您使用内置command
以及Bash和Dash如何区别对待它们。
在man bash
:
command [-pVv] command [arg ...]
... 如果提供了-V或-v选项,则在找到命令时退出状态为0,否则为1。如果 如果未提供选项且发生错误或无法找到命令,则退出状态为127.否则,命令builtin的退出状态为命令的退出状态。
这就是为什么你得到一个带有Bash的exit 1
。
由于Dash不像Bash那样处理-v
中的command
选项,因此会将nwef
视为“未找到命令”,即exit 127
。
我认为在这里注意Debian如何以./test.sh
的方式区别对待sh test.sh
也很重要。由于该脚本不包含#!/bin/sh
等解释器的shebang路径,因此运行./test.sh
默认为#!/bin/bash
而不是#!/bin/sh
,并将command
的使用视为exit 1
。不幸的是,我在文档中找不到对此的解释。