Linux 执行shell脚本与在ubuntu 12.04中使用sh命令直接不同
尝试使用简单脚本测试命令是否存在Linux 执行shell脚本与在ubuntu 12.04中使用sh命令直接不同,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,尝试使用简单脚本测试命令是否存在 $ 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”不同吗 sh在Ubuntu中是dash,而不是bash。退出状态的区别在于您对命令的使用以及bash和dash如何区别对待它们 在man bash的中: 。。。 如果提供了-V或-V选项,则如果找到命令,则退出状
$ 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”不同吗
sh
在Ubuntu中是dash,而不是bash。退出状态的区别在于您对命令的使用以及bash和dash如何区别对待它们
在man bash的中
:
。。。
如果提供了-V或-V选项,则如果找到命令,则退出状态为0,如果未找到命令,则退出状态为1。如果
未提供任何选项,并且出现错误或找不到命令,退出状态为127。否则,内置命令的退出状态为命令的退出状态
这就是为什么Bash会出现exit 1
由于Dash不像Bash那样处理命令中的-v
选项,因此它将nwef
视为“未找到命令”,即退出127
我认为在这里还需要注意Debian是如何区别对待/test.sh
和sh test.sh
的。因为脚本不包含像#这样的解释器的shebang路径/bin/sh
,运行/test.sh
默认为#/bin/bash
而不是#/bin/sh
并使用退出1
处理您对命令的使用。不幸的是,我在文档中找不到对此的解释。检查什么是sh。我猜debian派生系统有一个奇怪的怪兽,比如/bin/ash
或/bin/sash
,作为“基本shell”。如果是,那么您应该检查命令
行为,我不知道它做了什么命令
内置也包含在Dash中,我认为它只是没有像Bash那样对待-v
选项。后更新。
command [-pVv] command [arg ...]