アプリ版:「スタンプのみでお礼する」機能のリリースについて

rsh host "sh -c 'cat hogefile >> ~/remotefile; echo \\$?' "


これがリモート側で実行されるコマンドでしょうか?
sh -c 'cat - hogefile >> ~/remotefile; echo \\$?'

A 回答 (1件)

シェルでコマンドを実行するときには、



まず、シェルが * だの $ だのの展開や、 引用符による処理をします。
その結果を実行コマンドとして実行します。

例えば
 echo $?
だったら、実行前に $? の内容をシェルが展開して、例えば
 echo 1
というコマンドにして実際に実行します。
echoコマンドは この 1 の元が $? だったことは知りません。
もし、引用符や\ によって、最後まで
 echo $?
の状態だったら、 echo はそのまま
 $?
を出力します。

どんなものがどんな風に展開されるか、は、まずは使っている シェルのマニュアルを読むことです。
cshとshとでは微妙に違うし、同じ Bsh 系と呼ばれるもの同士でも細かい点で違います。



実際にどんな風に展開されたか知りたいのなら、 展開後のコマンドを表示するオプションがあります。
set -x で表示モード、 set +x で解除です。
また、起動時に -x オプションを付けると、同じ効果があります。

rsh host "sh -c 'cat hogefile >> ~/remotefile; echo \\$?' "
の前に set -x を実行しておけば、これがどんな風に展開されるかがわかるし、
この中の sh -c を sh -xc にすれば、リモート先でのコマンドがわかります。


この場合、まず、ローカルのシェルで展開されます。
" ( ダブルクオーテーション) の有効な範囲は
sh -c 'cat hogefile >> ~/remotefile; echo \\$?'
で、この中では、特殊な文字の展開が行なわれます。
この中にあるシングルクオート は、今の時点ではただの文字です。特別な意味はありません。

そうしてできた文字列をrsh にわたし、rsh がリモートで実行します。
    • good
    • 0
この回答へのお礼

わかりやすいご説明ありがとうございます!

お礼日時:2017/11/15 19:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!