1

У меня есть следующая команда:

ssh $USER@$HOST "ls /ops/pkg/ec/`grep "PKRTS" /ops/pkg/ec | awk '{print $1}'`* > /tmp/tmp_file"

То, что выше, ДОЛЖНО сделать ... это ssh для хоста, затем выполнить команду. Команда должна сначала выполнить grep и awk между обратными галочками, сгенерировать имя файла, затем ls использовать это имя * и записать эти данные во временный файл.

Тем не менее, он выполняет grep и awk еще до SSH, а команда, отправляемая на сервер, представляет собой просто "ls /ops/pkg/ec/* > /tmp/tmp_file" поскольку grep и awk ничего не возвращают на локальном сервере. машина.

Есть идеи как обойти это?

1 ответ1

3

Это проблема цитирования. Обратные черты интерпретируются внутри двойных кавычек, поэтому вы должны заключить вашу команду в одинарные кавычки. Затем вам нужно проделать еще некоторую работу, связанную с цитированием скрипта awk:

ssh $USER@$HOST 'ls /ops/pkg/ec/$( awk "/PKRTS/ {print \$1}" /ops/pkg/ec )* > /tmp/tmp_file'

Возможно, вам придется поэкспериментировать с количеством обратных косых черт, чтобы защитить знак доллара в команде awk.

Обратите внимание на мой комментарий выше: является ли /ops /pkg /ec файлом или каталогом? Если это каталог, то grep "PKRTS" /ops/pkg/ec , вероятно, не то, что вам нужно.

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