9

Эта команда не работает:

ssh $HOST "ls -l | awk '{print $1}'"`

Выше игнорирует команду awk . Я думаю, что это может быть из-за двойных кавычек?

Кроме того, как бы я добавил еще один набор двойных кавычек внутри awk?

то есть:

ssh $HOST "awk '{print $1 "*"}' /some_file"

Я пытался избежать кавычек, я даже попробовал это:

ssh $HOST "awk '{print $1 "\""*"\""}' /some_file"

безуспешно.

1 ответ1

17

Переменная интерполяция выполняется в двойных кавычках, поэтому я думаю, что вот что может произойти: когда вы ssh $HOST "ls -l | awk '{print $1}'" , ваша оболочка (та, что на вашем локальном компьютере, где вы работают SSH клиент) видит $1 в двойных кавычках и заменяет его значением переменной $1 , которое будет пустым. Он не может обнаружить, что $1 вложен в одинарные кавычки в двойные кавычки. Итак, что в конечном итоге отправляется на удаленный сервер

ls -l | awk '{print }'

что в основном эквивалентно

ls -l | cat

то есть он просто выводит вывод команды ls -l .

Решение: экранировать $ с помощью обратной косой черты,

ssh $HOST "ls -l | awk '{print \$1}'"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .