簡體   English   中英

如何編寫檢查 bash 命令結果的 function

[英]How to write a function that check the result of a bash command

我正在嘗試編寫一個簡單的 function 來輕松調試我的腳本並使我的代碼更簡單。 (3小時后仍然卡住)

我想傳遞給這個 function 3 arguments

  1. 一個命令
  2. 成功字符串
  3. 和一個錯誤字符串

function 應該執行命令並打印正確的字符串,無論它是否成功。 我所說的成功是指命令在 output 中打印某些內容。

這是我嘗試過的(在 CentOS7 上):

#!/bin/bash
CMD=$(yum list installed | egrep "yum.utils.\w+" | cut -d " " -f1)
SUCCESS="YES"
ERROR="NO"
foo() {
if ["$1" != ""]; then
    echo -e "$2"
else
    echo -e "$3"
fi
}
foo $CMD $SUCCESS $ERROR

不幸的是,我遇到了兩個問題:

  • 首先,當 $CMD 為空時,第一個參數將是 $SUCCESS 而不是空字符串(我想要的行為)
  • 其次,我想刪除控制台 output (> /dev/null 2>&1???)。

你認為有可能嗎? 你知道怎么做嗎? 否則,使用 eval 命令是否有更簡單的方法?

感謝閱讀,祝您有美好的一天,

瓦倫丁 M。

------------------ 更正 ------------------

#!/bin/bash
CMD=$(yum list installed | grep -E "yum.utils.\w+" | cut -d " " -f1)
SUCCESS="YES"
ERROR="NO"
foo() {
if [ "$1" != "" ]; then
    echo -e "$2"
else
    echo -e "$3"
fi
}
foo "$CMD" "$SUCCESS" "$ERROR"

我在這里發現了一個類似的主題:堆棧溢出:如何編寫 Bash function 可以通用地測試 output 的執行命令?

不幸的是,我遇到了兩個問題:

  • 首先,當 $CMD 為空時,第一個參數將是 $SUCCESS 而不是空字符串(我想要的行為)

如果您按照上面 William Pursell 評論中的建議,這個問題就解決了,因為然后傳遞了一個空的第一個參數。

  • 其次,我想刪除控制台 output (> /dev/null 2>&1???)。

我假設控制台 output是指 output 到 STDERR,因為 STDOUT 分配給CMD 您的> /dev/null 2>&1不合適,因為它還將 STDOUT 重定向到/dev/null 只需使用 STDERR 執行此操作:

CMD=$(yum list installed 2>/dev/null | egrep "yum.utils.\w+" | cut -d " " -f1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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