第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從Bash腳本中檢查程序是否存在?

如何從Bash腳本中檢查程序是否存在?

如何從Bash腳本中檢查程序是否存在?我將如何驗證一個程序是否存在,或者返回一個錯誤并退出,或者繼續(xù)執(zhí)行這個腳本?這看起來應該很容易,但它一直在阻撓我。
查看完整描述

3 回答

?
慕姐8265434

TA貢獻1813條經(jīng)驗 獲得超2個贊

回答

兼容POSIX:

command -v <the_command>

bash具體環(huán)境:

hash <the_command> # For regular commands. Or...type <the_command> # To check built-ins and keywords

解釋

which..這不僅是一個外部進程,您要啟動的過程非常少(這意味著內(nèi)置程序,如hashtypecommand),您也可以依賴內(nèi)置程序來實際執(zhí)行您想做的事情,而外部命令的效果可能因系統(tǒng)而異。

何必在乎?

  • 許多操作系統(tǒng)都有一個

    which

    那,那個

    甚至不設置退出狀態(tài)

    ,意思是

    if which foo

    甚至不會在那里工作

    報告

    foo

    存在,即使它不存在(請注意,一些POSIX shell似乎是這樣做的。)

    hash

    )。
  • 許多操作系統(tǒng)

    which

    做一些定制和邪惡的事情,比如改變輸出,甚至連接到包管理器。

所以,不要用which..相反,請使用以下其中之一:

$ command -v foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }$ type foo >/dev/null 2>&1 ||
 { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }$ hash foo 2>/dev/null ||
  { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }

(次要的旁注:有些人會建議2>&-是一樣的2>/dev/null但更短-這是不真實的2>&-關閉fd 2,這會導致誤差在程序中,當它試圖寫入stderr時,這與成功地寫入它和丟棄輸出(和危險!)有很大的不同!

如果你的哈希/bin/sh那么你應該關心POSIX說了些什么。typehashPOSIX沒有很好地定義退出代碼,而且hash在命令不存在時成功退出(還沒有看到type)。commandPOSIX很好地定義了退出狀態(tài),因此使用起來可能是最安全的。

如果您的腳本使用bash不過,POSIX規(guī)則已經(jīng)不再重要了,兩者兼而有之。typehash完全安全地使用。type現(xiàn)在有一個-P搜索PATHhash有副作用,即命令的位置將被散列(以便下次使用時更快地查找),這通常是一件好事,因為您可能會檢查它的存在,以便實際使用它。

作為一個簡單的例子,下面是一個運行gdate如果存在,則為date:

gnudate() {
    if hash gdate 2>/dev/null; then
        gdate "$@"
    else
        date "$@"
    fi}


查看完整回答
反對 回復 2019-06-05
?
大話西游666

TA貢獻1817條經(jīng)驗 獲得超14個贊

下面是檢查命令是否存在于$PATH 是可執(zhí)行的:

[ -x "$(command -v foo)" ]

例子:

if ! [ -x "$(command -v git)" ]; then
  echo 'Error: git is not installed.' >&2
  exit 1fi

需要進行可執(zhí)行檢查,因為bash返回一個非可執(zhí)行文件,如果在$PATH.

還請注意,如果與可執(zhí)行文件的名稱相同的非可執(zhí)行文件存在于$PATH,Dash返回前者,即使后者將被執(zhí)行。這是一個錯誤,違反了POSIX標準。[錯誤報告] [標準]

此外,如果您要查找的命令被定義為別名,則此操作將失敗。


查看完整回答
反對 回復 2019-06-05
  • 3 回答
  • 0 關注
  • 870 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號