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
普通はやらないよね・