假設我們只有 1 個參數
host $1
我如何檢查上述命令是否會給我答案或:
Host $1 not found (NXDOMAIN)
我不想顯示未找到的錯誤,只想顯示-
答案1
host
如果無法解析您的輸入,將退出 1,因此您可以使用 if 建構:
if ! host "$1" | grep -v 'not found'; then
printf '%s\n' '-'
fi
我們用來!
測試命令是否失敗(因為我假設您只想在命令通過時正常列印輸出)。 將錯誤host
發送not found
到 stdout 而不是 stderr,因此我們不能只是隱藏 stdout。這就是為什麼我將主機命令通過管道傳遞到此命令grep -v 'not found'
將隱藏未找到的錯誤(如果存在)並且仍然退出 1,從而導致 if 構造列印-
。如果沒有找到not found
就會退出 0。
答案2
退出狀態就夠了嗎?$?
即使您使輸出靜音,您也可以合併上一個指令的退出狀態。對於host
退出狀態,0 表示成功,1 表示錯誤
[17:54] [ws ~] $ host 127.0.0.112 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
1
[17:54] [ws ~] $ host 127.0.0.1 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
0