シェルを使用してリモートサーバーからスクリプトを呼び出したい。このスクリプトの出力(ログメッセージ)と返される終了コードをキャプチャしたいと思います。
私がこうすれば:
ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"
終了コードを受け取りましたが、リモートロギングメッセージをキャプチャできませんでした。
私がこうすれば:
local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?"
LOG "${RESULTS}";
LOG関数を使用して出力を記録していますが、正しい終了コードを取得できないようです。私が得たコードは変数割り当てのためのコードであると仮定します。
続いて、LOG機能を使用してフォーマットし、コンテンツをファイル、システムログ、および画面に送信するすべての出力をキャプチャしたいと思います。
varで結果をキャプチャし、リモートスクリプトから正しい終了コードを取得するにはどうすればよいですか?
ベストアンサー1
正しいエラーコードが得られない理由は、local
実際に最後に実行されたものです。コマンドを実行する前に、変数をローカル変数として宣言する必要があります。
local RESULTS
RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo $?
ここで問題を見ることができます。
$ bar() { foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2
$ bar() { local foo=$(ls asdkjasd 2>&1); echo $?; }; bar
0
$ bar() { local foo; foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2