簡體   English   中英

Shell腳本可在bash中工作,但不能在ksh中工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM