
Я хотел бы выполнить следующую команду через 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
Один из надежных способов — сделать следующее:
ssh 127.0.0.1 sh << "EOF"
echo "trap '/tmp/test &' INT" >> /tmp/output.txt
EOF
Тогда вы знаете, какую оболочку вы получите, здесь sh
в отличие от оболочки входа удаленного пользователя, какой бы она ни была, и вы можете легко передать код для ее sh
дословной интерпретации, не беспокоясь о кавычках.
(Кстати, вы вряд ли захотите использовать его -T
когда-либо. Вы можете захотеть использовать -t
, но только для запуска интерактивных приложений, таких как vi
или интерактивная оболочка; сигнал 9, обычно SIGKILL, не может быть перехвачен, лучше использовать имена сигналов, а не номера).