简体   繁体   中英

Shell script works in bash but not in ksh

I need to write a script to test if the command blablabla exists in the classpath. So I wrote the following code:

if ! hash blablabla >/dev/null 2>&1; then
   echo not found
fi

This works fine when the script is executed in the bash. But if I try it in KSH, then it doesn't work:

#! /usr/bin/ksh

if ! hash blablabla >/dev/null 2>&1; then
   echo not found
fi

I expect the echo not found to be executed but instead I get nothing. What's the problem?

In bash hash is a builtin command. In ksh it's an alias; aliases aren't active in shell scripts.

alias hash='alias -t --'

Try the which command, which is an external command and therefore shell-independent:

if ! which -s blablabla; then
    echo not found >&2
fi

I believe command is portable (if that matters):

command -v -- some_command >/dev/null 2>&1 ||
  printf '%s\n' "not found"  

Tha hash command is a shell built-in command in bash , but not in ksh . You might want to use whence instead.

if ! whence blah; then print urgh; fi  

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM