パラメータが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
を stderr ではなく stdout に送信するため、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