ssh'ing к хосту и выполнению команды, не работающей правильно

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

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'ing и команда, которая переходит к серверу, просто "ls /ops/pkg/ec/* > /tmp/tmp_file" так как grep и awk ничего не возвращают на локальной машине.

Какие-либо идеи, как обойти это?

1
задан 20.08.2010, 19:52

1 ответ

Это - проблема заключения в кавычки. Обратные галочки становятся интерпретируемыми в двойных кавычках, таким образом, необходимо включить команду в одинарные кавычки. Затем необходимо сделать еще некоторую работу, связанную с 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 вероятно, не, что Вы хотите.

3
ответ дан 12.12.2019, 10:40

Теги

Похожие вопросы