リモートシェルの終了ステータス


ssh を使うので利用機会は無いと思うけど・・

リモートシェルの利用確認

リモート側でechoして接続確認。

#!/bin/sh
rsh host "echo test > /dev/null"
if [ $? -n 0 ]; then
    echo "Connection faild." 1>&2
    exit 1
fi

リモート先のログインシェルを強要する

リモートシェルでコマンド実行する場合、リモートホスト側のログインシェルで実行される。Bシェルを強要したい場合は以下のようにする。

rsh host "sh -c 'echo test'"

リモートコマンドの終了ステータス

リモートシェルの終了ステータスは rsh コマンド自体の正常終了を表すため、リモートコマンドが失敗しても $? の値は 0 となる。

以下のようにリモート側の終了ステータスをローカルのファイルに出力して、ファイルを判定すればよい。

rsh host "echo test; echo \$?" > tempfile

ローカル側で $? が解釈されないようにエスケープが必要。

または、変数に代入。

STAT=`rsh host "echo test; echo \\$?"`

エスケープは 2 個必要。

コマンドの解釈のエスケープ処理は間違いやすいので以下のようにするのが得策。

STAT=`rsh host "sh -c '(command && echo 0) || echo 1'"`

リモートシェルによるファイルコピー

ローカルのファイルをリモートのファイルに標準出力経由でコピーするには

cat localfile | rsh host "cat - > remotefile"

または

rsh host "cat > remotefile" < localfile

リモートのファイルをローカルにコピーするには

rsh host cat remotefile > localfile

普通はやらないよね・

ssh 使おうよ・

rsh は ssh に置き換え可能で、終了ステータスもリモートコマンドのものが取れる。ファイルのコピーは scp で。