另一种选择-在项目自动配置脚本中看到的一种模式:
if [ -x /usr/bin/figlet ]
then
FIGLET=/usr/bin/figlet
else
FIGLET=:
fi
$FIGLET "Hello, world!"
在您的特定情况下,您甚至可以做到,
if [ -x /usr/bin/figlet ]
then
SAY=/usr/bin/figlet
elif [ -x /usr/local/bin/figlet ]
then
SAY=/usr/local/bin/figlet
elif [ -x /usr/bin/banner ]
then
SAY=/usr/bin/banner
else
SAY=/usr/bin/echo
fi
$SAY "Hello, world!"
如果您不知道特定的路径,则可以尝试多个elif
(请参见上文)尝试已知的位置,或者仅使用PATH
总是解析命令:
if command -v figlet >/dev/null
then
SAY=figlet
elif command -v banner >/dev/null
then
SAY=banner
else
SAY=echo
fi
通常,在编写脚本时,我更喜欢只在我指定的特定位置调用命令。我不喜欢最终用户可能PATH
在他们自己身上投入的不确定性/风险~/bin
。
例如,如果我正在为其他人编写一个复杂的脚本,该脚本可能会根据我正在调用的特定命令的输出来删除文件,那么我不想意外地从它们~/bin
中提取可能是或不是命令的东西我期望。