Экранирование кавычек и апострофов при выполнении команды 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

Один из надежных способов — сделать следующее:

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

Тогда вы знаете, какую оболочку вы получите, здесь shв отличие от оболочки входа удаленного пользователя, какой бы она ни была, и вы можете легко передать код для ее shдословной интерпретации, не беспокоясь о кавычках.

(Кстати, вы вряд ли захотите использовать его -Tкогда-либо. Вы можете захотеть использовать -t, но только для запуска интерактивных приложений, таких как viили интерактивная оболочка; сигнал 9, обычно SIGKILL, не может быть перехвачен, лучше использовать имена сигналов, а не номера).

Связанный контент