如何控制shell脚本的执行模式?

如何控制shell脚本的执行模式?

我想限制想要使用特定脚本的用户遵循特定的执行格式,并在不遵循该脚本的情况下在屏幕上打印错误消息。我希望用户仅以以下格式运行我的脚本

$ bash script.sh

如果他们尝试以其他格式执行,例如,

$ sh script.sh

$./script.sh

我想打印一条错误消息,其中包含有关如何执行脚本的说明

答案1

#!/bin/echo Run this script with: bash

if ! [ "$BASHOPTS" ]
then
    echo Run this script as bash script.sh
    exit 1
fi
... rest of script here ...

这可以防止(有用的)使用 执行./script.sh,调用echo二进制文件而不是 shell 解释器,并在第一行打印消息,后跟脚本名称。

如果在非 Bash shell 中运行,或者在 POSIX 模式下运行 Bash(与 一样sh),则BASHOPTS几乎肯定不会设置该变量,并且 的主体if将运行,打印一条消息并因错误而退出。

sh当用作;时,这适用于 4 系列 Bash 版本。对于早期版本,也许if ! [ "$BASH" ] || ! [ "${BASH##*/}" = "bash" ]是您最好的选择,它检查解释器的路径是否以/bash.如果您的sh系统不是 Bash,那么只需检查$BASH就足够了。

老实说,我认为您可能解决了错误的问题,但这将满足您的要求。

相关内容