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