SSH コマンド実行による引用符とアポストロフィのエスケープ

SSH コマンド実行による引用符とアポストロフィのエスケープ

ssh 経由で次のコマンドを実行したいと思います。

echo "trap '/tmp/test &' 2 9" >> /tmp/output.txt

私は次のことをやろうとしています:

ssh 127.0.0.1 -T "echo "trap '/tmp/test &' 2 9" >> /tmp/output.txt"

私は次のように Python サブプロセスを使用しています:

command = "echo \"trap '/tmp/test &' 2 9\" >> /tmp/output.txt"
addtrap = 'ssh root@' + rhost + ' -T "' + command + '"'
subprocess.Popen(addtrap, shell=True)

しかし、明らかに、引用符とアポストロフィに関するエラーが発生しています。この問題を回避する方法はありますか?

答え1

信頼できる方法の 1 つは、次のとおりです。

ssh 127.0.0.1 sh << "EOF"
echo "trap '/tmp/test &' INT" >> /tmp/output.txt
EOF

shすると、リモート ユーザーのログイン シェルではなく、どのシェルを取得するかがわかり、sh引用符を気にせずに、そのコードを簡単に渡して逐語的に解釈できるようになります。

(ちなみに、 はほとんど使用したくないでしょう-T。 を使用したいかもしれません-tが、 や対話型シェルなどの対話型アプリケーションを実行する場合のみですvi。シグナル 9 では通常、 SIGKILL をトラップできないため、番号よりもシグナル名を使用する方が適切です)。

関連情報