1. ホーム
  2. bash

[解決済み] ssh / リモートbashコマンドでシングルクォート文字をエスケープするにはどうすればよいですか?

2022-02-16 13:04:06

質問

リモートでプロセスの開始、停止、状態をチェックするための小さなスクリプトのセットを作っています。このスクリプトは stop これらのスクリプトのうち、あるプロセスを探し、それを殺す必要があります。したがって、私はそうする。

ssh deploy@hera 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '{print $2}' | head -n 1`'

ここでの問題は、awk のトークン化ステップでシングルクォートを必要とし、これが ssh 経由のリモートコマンドを実行する際に利用されるシングルクォートと衝突してしまうことです。これらのシングルクォートをどのようにエスケープすればよいのでしょうか?

解決方法は?

使用方法

ssh deploy@hera 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '"'"'{print $2}'"'"' | head -n 1`'

説明する。

ssh deploy@hera 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '"'"'{print $2}'"'"' | head -n 1`'
                >                               1                                   <>2<>    3     <>4<>      5      <

1) コマンドの先頭を表す文字列。 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '

2) 2つ目の文字列に「」が1つだけある場合。 "'"

3) 3つ目の文字列をprintコマンドで表示。 '{print $2}'

4) 4番目の文字列にもう1つのシングルクォートを付ける。 "'"

5) 5番目の文字列とコマンドの残り。 ' | head -n 1`'