Я хотел бы использовать аргументы из файла как параметры командной строки для некоторых команд как gcc или ls.
Например, gcc -o output -Wall -Werro
как файл состоят из:
- o вывод - Стена-Werro
Используемый для gcc вызова командной строки.
Вы можете использовать xargs
:
cat optionsfile | xargs gcc
Изменить: я был отклонен, потому что Лоран не знает, как работает xargs
, поэтому вот доказательство:
$ echo "-o output -Wall -Werro" > optionsfile
$ cat optionsfile | xargs -t gcc
gcc -o output -Wall -Werro
i686-apple-darwin10-gcc-4.2.1: no input files
Флаг -t
вызывает запись команды в stderr
перед выполнением.
Я рекомендую использовать $ ()
вместе с cat:
gcc $(cat file)
Хорошая особенность $ ()
через обратные кавычки (классический способ) состоит в том, что их легче вкладывать друг в друга:
gcc $(cat $(cat filename))
В большинстве случаев подстановка команд (с помощью обратных кавычек или $ (), как указывали другие) - это нормально, но остерегайтесь оболочки {{1 }} правила раскрытия. В частности, имейте в виду, что снятие кавычек выполняется до , а разделение слов выполняется после подстановки команды .
Это не так уж плохо, если все ваши аргументы - слова, но если вы начнете вставлять в аргументы пробелы или другие специальные символы, которые обычно должны быть заключены в кавычки, тогда вы можете встретить { {1}} со странными результатами (обратите внимание на ненормальный интервал и кавычки в выводе):
$ echo "foo 'bar baz'" >a
$ echo $(cat a)
foo 'bar baz'
Цитирование всей подстановки команды не является решением, очевидно, поскольку это предотвратит разделение слов (следовательно, все содержимое вашего файла будет отображаться как один длинный аргумент вместо множества параметров ) и ничего не сделает с кавычками.
$ echo "$(cat a)"
foo 'bar baz'
Одним из решений этой проблемы является использование встроенной команды eval:
$ eval echo "$(cat a)"
foo bar baz
Примечание: echo может быть здесь не лучшим примером команды; вы можете захотеть заменить его чем-нибудь другим, например следующая функция:
$ f() { echo $#; }