2015-05-18 7 views
0

У меня есть команда rsync, которая работает как ожидалось, когда я ввожу ее непосредственно в терминал. Команда содержит несколько аргументов типа --include='blah' и --exclude='foo'. Однако, если я сохраню эту команду в однострочном файле под названием «myfile», и я попробую «cat myfile» (или, что то же самое, $(cat myfile)), команда rsync ведет себя по-разному.Разница между вводом команды оболочки и сохранением ее в файл и использованием `cat myfile` для ее выполнения?

Я уверен, что это точно такая же команда в обоих случаях.

Ожидается ли это/объяснимо?

+1

Удаление цитат/цитат и разбиение слов. Запустите 'set -x', прежде чем запускать обе версии команды, чтобы увидеть разницу. –

+1

Что бы вы ни пытались, '$ (cat myfile)' - это убогий способ сделать это. Точка (aka 'source' в Bash) оценивает команды в файле в контексте текущей оболочки, если это то, что вы хотите выполнить. Так что просто скажите '. myfile'. – tripleee

ответ

0

Я нашел ответ на этот вопрос. Дело в том, что команда cat принимает содержимое файла и рассматривает его как строку. Производятся любые строковые операторы (например, оператор escape). Затем конечный вывод строки - это то, что передается команде через обратные выходы.

В качестве решения я только что создал «myfile» сценарий оболочки, который я могу выполнить, вместо того, чтобы пытаться использовать cat.