• このエントリーをはてなブックマークに追加

rshを利用してリモートホスト上のシェルスクリプトを実行すると、シェルスクリプトの成功・失敗にかかわらず終了ステータスはrst/sshの終了ステータスが返る。たとえば、リモートシェルが失敗した場合でも、通信が成功すると、終了ステータスは成功となる。

たとえは、これだと終了ステータスは正常終了の0がかえる。

#!/bin/bash
rsh tsu-nera@192.168.118.129 fail_shell
echo "$?"

こんなときは、コマンド実行結果をローカルファイルにリダイレクトして、その中身を見てみるとよい。ローカル側で $? が解釈されないように\$?とする必要があることに注意。

#!/bin/bash

# リモートシェル実行
rsh tsu-nera@192.168.118.129 "~/bin/fail_shell;echo \$?" > tmp

# ファイル出力から変数に代入
tail -n 1 tmp >> tmp2; rm tmp
read RESULT < tmp2;    rm tmp2

# 結果判定
if [ $RESULT -eq 0 ]; then
    echo "Shell Sucess"
    exit 0
else
    echo "Shell failed"
    exit 1
fi

もっとシンプルな書き方がある気がする。。。