我需要编写一个脚本来测试命令blablabla是否存在于类路径中。所以我写了下面的代码:
if ! hash blablabla >/dev/null 2>&1; then
echo not found
fi
当在bash中执行脚本时,这可以正常工作。但如果我在KSH中尝试它,那么它不起作用:
#! /usr/bin/ksh
if ! hash blablabla >/dev/null 2>&1; then
echo not found
fi
我希望执行echo not found
,但我什么都没得到。有什么问题?
答案 0 :(得分:3)
在bash中hash
是一个内置命令。在ksh中它是别名;别名在shell脚本中不活动。
alias hash='alias -t --'
尝试which
命令,这是一个外部命令,因此与shell无关:
if ! which -s blablabla; then
echo not found >&2
fi
答案 1 :(得分:3)
我相信命令是可移植的(如果重要的话):
command -v -- some_command >/dev/null 2>&1 ||
printf '%s\n' "not found"
答案 2 :(得分:0)
Tha hash
命令是bash
中的shell内置命令,但不在ksh
中。您可能希望改为使用whence
。
if ! whence blah; then print urgh; fi