Скрипт оболочки работает в bash, но не в ksh - PullRequest
2 голосов
/ 07 октября 2011

Мне нужно написать скрипт, чтобы проверить, существует ли команда 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 ]

3 голосов
/ 07 октября 2011

Я считаю, команда является переносимой (если это имеет значение):

command -v -- some_command >/dev/null 2>&1 ||
  printf '%s\n' "not found"  
3 голосов
/ 07 октября 2011

В bash hash - встроенная команда. В ksh это псевдоним; псевдонимы не активны в сценариях оболочки.

alias hash='alias -t --'

Попробуйте команду which, которая является внешней командой и поэтому не зависит от оболочки:

if ! which -s blablabla; then
    echo not found >&2
fi
0 голосов
/ 07 октября 2011

Tha hash - это встроенная команда оболочки в bash, но не в ksh. Возможно, вы захотите использовать whence вместо.

if ! whence blah; then print urgh; fi  
...