34

コマンド出力を変数にリダイレクトしようとしています:

OUTPUT=$(sudo apache2ctl configtest)

そしてそれを読むために:

echo $OUTPUT

実行すると、出力は次のようになります。

19:19:12 user@user ~ OUTPUT=$(sudo apache2ctl configtest)
Syntax OK
Syntax OK

ただし、変数は空白のままです。他のコマンドでも同じことを試しましたが、すべてうまくいきました。

OUTPUT=$(ls -l)

OUTPUTこれにより、後で読み取ることができるように、ファイル リストが変数に書き込まれます。それを機能させるにはどうすればよいですか?

4

2 に答える 2

63

たぶん、出力はstderrではなくになりstdoutますか?これを試して:

OUTPUT=$(sudo apache2ctl configtest 2>&1)
于 2012-04-25T16:26:07.857 に答える
0

nginx の場合、構成ファイルでエラーが発生しても configtest が成功する可能性があります。例:

nginx: [warn] conflicting server name "test.com" on 0.0.0.0:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

bash スクリプトのチェック エラーを修正するには、以下を使用する必要があります。

if [[ $((sudo /sbin/service nginx configtest) 2>&1 | grep "failed\|warn" ) ]]; then
    echo "ERROR!!!"
else
    echo "OK!!!"
fi
于 2017-03-07T09:20:24.993 に答える