質問:
コマンドの結果を変数に保存すると、portcheck
期待どおりに機能しません。私のスクリプトにはこのメソッドが含まれています。
#!/bin/bash
...
status() {
portcheck=$(nc -z -v -w5 localhost 8443)
echo "*${portcheck}*"
if [[ $portcheck == *refused* ]]; then
echo "Application is stopped"
elif [[ $portcheck == *succeeded* ]]; then
echo "Application is started"
else
echo "state unknown"
fi
}
myscriptを実行すると、次のような結果が表示されます。
> $ ./myscript status
> Connection to localhost 8443 port [tcp/*] succeeded!
> **
> state unknown
しかし、私が望むのは、コマンドの結果が変数に格納され、portcheck
出力が次のようになるはずです。
> $ ./myscript status
> Connection to localhost 8443 port [tcp/*] succeeded!
> *Connection to localhost 8443 port [tcp/*] succeeded!*
> Application is started
私は以下に基づいていくつかのバリエーションを試しました。 https://stackoverflow.com/questions/4651437/how-to-set-a-variable-to-the-output-from-a-command-in-bash その他の例:
portcheck=`nc -z -v -w5 localhost 8443`
変える
portcheck=$(nc -z -v -w5 localhost 8443)
しかし、それはうまくいきませんでした。私は何が間違っていましたか?
背景:
注文する
nc -z -v -w5 localhost 8443
ポートが接続可能であることを確認してください。それは戻ってくる
Connection to localhost 8443 port [tcp/*] succeeded!
ポートが「開いている」
nc: connect to localhost port 8443 (tcp) failed: Connection refused
ポートが「閉じた」場合。
bashで単にコマンドを実行すると正常に動作します。
答え1
呼び出しはnc
デフォルトでstderrとして印刷されるため、次のように出力をstdoutに送信する必要があります。
portcheck=$(nc -z -v -w5 localhost 8443 2>&1)
echo "*${portcheck}*"
この場合、出力は次のようになります。
*Connection to localhost 8443 port [tcp/*] succeeded!*