[英]How to write a function that check the result of a bash command
我正在嘗試編寫一個簡單的 function 來輕松調試我的腳本並使我的代碼更簡單。 (3小時后仍然卡住)
我想傳遞給這個 function 3 arguments
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
不幸的是,我遇到了兩個問題:
你認為有可能嗎? 你知道怎么做嗎? 否則,使用 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.