[英]Shell script works in bash but not in 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
,但是我什么也沒得到。 有什么問題?
在bash中, hash
是一個內置命令。 在ksh中,這是一個別名; 別名在Shell腳本中無效。
alias hash='alias -t --'
嘗試執行which
命令,這是一個外部命令,因此與shell無關:
if ! which -s blablabla; then
echo not found >&2
fi
我相信命令是可移植的(如果很重要):
command -v -- some_command >/dev/null 2>&1 ||
printf '%s\n' "not found"
Tha hash
命令是bash
的shell內置命令,但不是ksh
的shell內置命令。 您可能要改用whence
。
if ! whence blah; then print urgh; fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.