我一直在四处寻找试图找到的东西,但是我找不到任何可用的东西。我相信答案很简单。
我正在编写一些shell脚本,以供不同的人运行以用于各种目的,其中一些可能会使用“ sh”而不是“ bash”来调用脚本。
该脚本包含无法在常规Shell环境中运行且需要bash的工具-即使使用“ sh”调用该脚本,也有一种方法可以强制该脚本在bash下运行吗?
正如Richard Pennington所说,做到这一点的正确方法是
#!/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
通常不能保证脚本(通常是脚本的名称)实际上是可以用来调用它的名称。我可以想象,如果您输入错误或系统配置有误,就会陷入无限循环。
我建议错误消息方法。
(注意:我刚刚编辑了此答案,因此错误消息包括脚本的名称,这可能对用户有所帮助。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句