いくつかのコマンドを実行しようとしていますが、次のssh
動作が混乱していますsh -c
。
ssh myhost sh -c 'echo starting; who -b; date; echo $SHELL'
出力(注:echoの出力は空白だけです!)
system boot 2016-12-22 20:22
Thu Jan 26 06:12:52 UTC 2017
/bin/bash
それ以外の場合はsh -c
正しい出力を取得します。
ssh myhost 'echo starting; who -b; date; echo $SHELL'
出力:
starting
system boot 2016-12-22 20:22
Thu Jan 26 06:18:28 UTC 2017
/bin/bash
質問:
- コマンドが正しく
sh -c
処理されないのはなぜですかecho starting
?空行を出力します。 /bin/bash
SHELLが偶数に設定されているのはなぜですかsh -c
?
答え1
ここでは何か違って直感的ではないことが起こっています。
まず、リモートホストのコマンドは次のように解析されます。
(sh -c echo starting); who -b; date; echo $SHELL
外側の引用符は削除され、echo starting
run in のみが残るので、 にsh
設定$SHELL
されます/bin/bash
。
第二に、この回答に記載されている理由で「開始」は印刷されません。https://unix.stackexchange.com/a/253424
ただし、コマンドを別の引用符で囲むことで、両方の問題を解決できます。
ssh myhost sh -c '"echo starting; who -b ; date; echo $SHELL"'
コマンドを含めるために一重引用符を移動すると、より明確になると思いますsh
。
ssh myhost 'sh -c "echo starting; who -b ; date; echo $SHELL"'