Как правильно избежать двойных кавычек в команде ssh pkill bash?
$ ssh root@123.123.123.123
123.123.123.123# pkill -f "stalled process name"; commands_to_restart; some_more_commands;
many many lines of output demonstrating success
123.123.123.123# exit;
ВСЕ РАБОТАЕТ ОТЛИЧНО
$ ssh root@123.123.123.123 "pkill -f "\""stalled process name"\"";"\
> "commands_to_restart; some_more_commands;";
нет выхода, ничего не делает.
$ ssh root@123.123.123.123 "echo "\""pkill -f "\"\\\"\""stalled process name"\"\\\"\""; "\
> "commands_to_restart; some_more_commands;"\"";";
pkill -f "stalled process name"; commands_to_restart; some_more_commands;
так что... ДВА ЭТАПА ВЫДЕЛЯЮЩИХ ЦИТАТУ работает, как и ожидалось...
Как получить один слой цитаты, работающей с ssh/bash? Поскольку цитирование работает отлично в двух слоях, у меня есть ощущение, что оно связано не столько с цитированием, сколько с некоторыми аспектами ssh
обработка терминала. Тем не менее, насколько я знаю, команды не делают ничего, кроме простого и регулярного ввода-вывода для стандартного вывода и без ввода.
2 ответа
Вам лучше использовать heredoc для таких вещей:
ssh root@123.123.123.123 bash -s << 'EOF'
pkill -f "stalled process name"
commands_to_restart
some_more_commands
EOF
bash -s
гарантирует, что вы используете bash, а не пользовательскую оболочку на удаленном хосте- цитирование маркера конца heredoc (
'EOF'
) гарантирует, что содержимое передается как есть, без интерпретации его родительской оболочкой
Пытаться:
ssh root@123.123.123.123 'pkill -f "stalled process name"; commands_to_restart; some_more_commands'
С помощью команды в одинарных кавычках нет необходимости избегать внутренних двойных кавычек.
Если вы предпочитаете использовать только двойные кавычки, то однократный выход внутренних двойных кавычек должен быть удовлетворительным:
ssh root@123.123.123.123 "pkill -f \"stalled process name\"; commands_to_restart; some_more_commands"