
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 をトラップできないため、番号よりもシグナル名を使用する方が適切です)。