执行shell脚本与在ubuntu 12.04中使用sh命令直接不同

时间:2014-02-08 05:43:32

标签: 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”与众不同?

2 个答案:

答案 0 :(得分:3)

Ubuntu中的

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。不幸的是,我在文档中找不到对此的解释。