LoginSignup
13

More than 5 years have passed since last update.

ssh などの引数がコマンドとして解釈されるコマンドに文字列を渡す

Last updated at Posted at 2014-09-26

(プロンプト文字を # としています)

ssh は引数にコマンドを与えることができます。

# ssh example.net echo hoge
hoge

次のように書くとローカル側で環境変数が展開されて ssh に渡ります。

# ssh are@example.net echo "$HOME"
/home/ore

次のように書くと ssh には $HOME という文字が渡されます。が、ssh はシェル経由でコマンドを実行するのでリモート側で環境変数が展開されます。

# ssh are@example.net echo '$HOME'
/home/are

なのでこんなふうに書くとローカルとリモートで2回環境変数が展開されます。

# HOGE='$HOME'
# echo $HOGE
$HOGE
# ssh are@example.net echo "$HOGE"
/home/are

なので $HOME という文字をリモートで実行されるコマンドに渡したければ次のように書く必要があります。

# ssh are@example.net echo '\$HOME'
$HOME

あるいは次のように書きます。

# ssh are@example.net echo "'"'$HOME'"'"
$HOME

次のようにコマンド全体を1つの引数として ssh に渡しても同じです。

# ssh are@example.net 'echo \$HOME'
$HOME

# ssh are@example.net "echo '"'$HOME'"'"
$HOME

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13