Shell脚本在bash中工作,但在ksh中不起作用

时间:2011-10-07 12:31:06

标签: bash shell ksh

我需要编写一个脚本来测试命令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,但我什么都没得到。有什么问题?

3 个答案:

答案 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