我一直在试图找到这个,但我找不到任何东西。我确信答案很简单。
我正在编写一些shell脚本用于各种目的,由不同的人运行,其中一些可能用“sh”而不是“bash”来调用脚本。
该脚本包含不在常规shell环境中运行且需要bash的工具 - 有没有办法强制脚本在bash下运行,即使它是用“sh”调用的?
答案 0 :(得分:25)
As Richard Pennington says,正确的方法是
#!/bin/bash
作为剧本的第一行。
但如果用户明确地使用sh
调用它,那将无济于事。例如,如果我输入
sh your-script-name
#!
行将被忽略。
您无法阻止人们这样做,但您可以通过在脚本顶部添加类似内容来阻止它:
#!/bin/bash
if [ ! "$BASH_VERSION" ] ; then
echo "Please do not use sh to run this script ($0), just execute it directly" 1>&2
exit 1
fi
或者你可以这样做:
#!/bin/bash
if [ ! "$BASH_VERSION" ] ; then
exec /bin/bash "$0" "$@"
fi
但这很容易出错;例如,可能无法保证$0
(通常是脚本的名称)实际上是一个可用于调用它的名称。我可以想象,如果你弄错了,或者你的系统稍有错误配置,这会进入一个无限循环。
我建议使用错误消息方法。
(注意:我刚刚编辑了这个答案,所以错误信息包含了脚本的名称,这可能对用户有所帮助。)
答案 1 :(得分:1)
#! /bin/bash
# The rest of your script.