Как использовать содержание файла в качестве параметров командной строки?

Я хотел бы использовать аргументы из файла как параметры командной строки для некоторых команд как gcc или ls.

Например, gcc -o output -Wall -Werro

как файл состоят из:

- o вывод - Стена-Werro

Используемый для gcc вызова командной строки.

9
задан morfis 24 March 2010 в 21:20
поделиться

5 ответов

Вы можете использовать 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 перед выполнением.

11
ответ дан 4 December 2019 в 06:11
поделиться

Я рекомендую использовать $ () вместе с cat:

gcc $(cat file)

Хорошая особенность $ () через обратные кавычки (классический способ) состоит в том, что их легче вкладывать друг в друга:

gcc $(cat $(cat filename))
4
ответ дан 4 December 2019 в 06:11
поделиться

В большинстве случаев подстановка команд (с помощью обратных кавычек или $ (), как указывали другие) - это нормально, но остерегайтесь оболочки {{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 $#; }
2
ответ дан 4 December 2019 в 06:11
поделиться

с bash

gcc $(<file)
2
ответ дан 4 December 2019 в 06:11
поделиться
gcc `cat file.with.options`
8
ответ дан 4 December 2019 в 06:11
поделиться
Другие вопросы по тегам:

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