telnet test | grep -o Unable
telnet: Unable to connect to remote Host: Connection refused
結果は「Unable」のみです。
接続できない場合にtelnet
が出力するエラーメッセージは、標準のerrorストリームに出力されます。標準エラーストリームは、デフォルトでは直接端末に送信されます。パイプを使用できるのは、標準のoutputストリームを他のコマンド(この場合はgrep
)に渡すことだけです。
リダイレクトによって、エラーストリームを標準出力ストリームに送信できます。
telnet test 2>&1 | grep -o Unable
これは2つのストリームをマージし、grep
はマージされたデータストリームとして機能します。
telnet
でエラー状態をキャッチする場合は、ユーティリティの終了ステータスを使用することもできます。
if ! telnet test 2>/dev/null; then
echo 'something went wrong with telnet'
exit 1
fi
echo 'telnet ran successfully'
telnet
がゼロ以外の終了ステータスを返した場合(なんらかの失敗を通知)、これはスクリプトを終了します。さらに、エラーストリームを/dev/null
にリダイレクトして完全に破棄しました。
メッセージがstderrに出力されているようですので、次のようにしてください。
telnet test 2>&1 | grep -o Unable
BashとZSHでは、|&
も使用できます。
telnet test |& grep -o Unable