次のように、リモートホストでいくつかのコマンドを実行しようとしています。
ssh -t -t -l user 172.20.20.20 <<EOF
pid=$(ps -ef | grep [a]pp-management | awk '{print $2}') && kill -9 $pid && rm -rf CI/*
EOF
リモートサーバーへのログイン状態を維持し、シャットダウンが実行されない場合は、次のようになります。
user@ubuntu:~$ pid= && kill -9 && rm -rf CI/*
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
どちらもrm
処刑されていませんでしたが、私は何が間違っていますか?
kill -9 コマンドに何も渡されていないことを確認しました。なぜですか?
答え1
$
区切り文書のシンボルによって導入された拡張は、コマンドに入力として渡された文字列を生成する前にローカルに評価されますssh
。
これを回避するには、区切り文書でコマンドをエスケープします(引用符など)。EOF
ssh ... <<"EOF"