質問:

質問:

質問:

コマンドの結果を変数に保存すると、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!*

関連情報