Вы не можете включать одинарные кавычки в строку с одним кавычком, поскольку внутри ничего не интерпретируется, кроме единственной цитаты, которая закрывает строку. Вы можете объединить отдельные кавычки строки с "'"
:
ssh host 'for pid in $(ps -ef | grep "some process" | awk '"'"'{print $2}'"'"'); do kill -9 $pid; done'
В качестве альтернативы, можно сцепить сбежавшие одиночные кавычки (\'
):
ssh host 'for pid in $(ps -ef | grep "some process" | awk '\''{print $2}'\''); do kill -9 $pid; done'
См Strong Quoting.
Причины возникновения ошибки
Ваша команда интерпретируется как пара $IFS
-разделенных аргументов:
for pid in $(ps -ef | grep "some process" | awk {print
}); do kill -9 $pid; done
Там нет $2
в строки, начиная с $2
интерпретируется как переменная оболочки, а значение этой переменной в обычном контексте оболочки пусто.
Таким образом, вы послали следующую команду на сервере:
for pid in $(ps -ef | grep "some process" | awk {print }); do kill -9 $pid; done
Если вы запустите эту команду в терминале, вы получите ту же ошибку с AWK.
Вы можете использовать 'pkill -f 'некоторый процесс" в этом случае. – ymonad
Это не будет убивать все процессы с определенным именем, не так ли? –