web-dev-qa-db-ja.com

コマンド出力をbashの変数にリダイレクトすると失敗する

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

OUTPUT=$(Sudo Apache2ctl configtest)

それを読むには:

echo $OUTPUT

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

19:19:12 user@user ~ OUTPUT=$(Sudo Apache2ctl configtest)
Syntax OK
Syntax OK

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

OUTPUT=$(ls -l)

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

21
roman

おそらく、出力はstderrではなくstdoutに行きますか?

これを試してください:OUTPUT=$(Sudo Apache2ctl configtest 2>&1)

42
johnshen64

Nginxの場合、configファイルでエラーが発生して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
0
beliy