2016-05-26 16 views
1

割り当てられた変数に渡していない:は、私がスクリプトでnginxの設定をテストしようとしていた

reply="$(nginx -t)" 
echo $reply 

しかし、$応答が返されたテキストを含むされていません。私は最初の行を端末に置くと、nginxのテキストが端末でポップしていますが、端末に2行目を置いても何も出力されません。 私の興味はでているnginxのテストの出力を使用することです

reply="$(nginx -t)" 
    if [[ ${reply} == *"nginx: configuration file /etc/nginx/nginx.conf test failed"* ]] 
    then 
      echo "It's there!"; 
    fi 

変数のコマンドnginxのを-tによって返された出力を取得する方法はありますif文?あなたは$(...)は、デフォルトでSTDOUT出力をキャプチャするのに対し、標準エラー出力にすることをnginxが最も可能性の高い印刷を意味エラーメッセージ、のためにテストしているあなたの条件から判断

+1

'$ reply'には何が含まれていますか? –

+0

を確認するには 'echo $ reply'ではなく' echo "$ reply"を使用してください。 echo "$ reply"も空に戻ってくる – cowboysaif

答えて

3

両方ストリームを捕捉するために

、使用:

reply="$(nginx -t 2>&1)" 

2>&1は、その標準エラーも$(...)によって捕捉されるように、stdoutにcommand substitution標準エラーをリダイレクト。

+0

完全に機能する非常に単純な答えです。それでは、stdoutとstderrは何らかのストリームですか? – cowboysaif

+0

はい、stdin、stdout、およびstderrはUnixライクなオペレーティングシステムの標準ストリームです - https://en.wikipedia.org/wiki/Standard_streamsを参照してください。 – mklement0

関連する問題