用sh运行bash脚本

时间:2013-10-23 10:05:07

标签: linux bash shell sh dash-shell

我有bash脚本,它需要bash。

另一个人试图用

运行它
sh script_name.sh

它失败了,因为sh是他的发行版中破折号的象征性链接。

$ ls -la /bin/sh
lrwxrwxrwx 1 root root 4 Aug 25 16:06 /bin/sh -> dash

我有想法使用包装器脚本:

#!/bin/sh
bash script_name.sh

目标是在具有符号链接的系统中使用bash运行.sh脚本。

2 个答案:

答案 0 :(得分:31)

好吧,通常你使用shebang告诉shell使用正确的解释器:

#!/bin/bash

# your script here

您必须将脚本设置为可执行文件:

chmod +x my_script.sh

让用户以:

启动它
./my_script.sh

使用包装器脚本似乎很简单。

即使用户使用sh / dash或任何类似解释器,您也可以使用jbr test来运行bash脚本:

#!/bin/bash

if [ -z "$BASH_VERSION" ]
then
    exec bash "$0" "$@"
fi

# Your script here

这样它就可以正常使用:

sh ./my_script.sh

# or

bash ./my_script.sh

# or

./my_script.sh

答案 1 :(得分:4)

在您之前的脚本中,您可以执行以下操作:

if [ "$BASH" != "/bin/bash" ]; then
  echo "Please do ./$0"
  exit 1
fi

或更通用的方式是使用$BASH_VERSION

if [ -z "$BASH_VERSION" ]; then
  echo "Please do ./$0"
  exit 1
fi