我想将文件中的参数用作命令行参数,用于gcc或ls等命令。
例如gcc -o output -Wall -Werro
由于文件包含:
-o output -Wall -Werro
用于gcc命令行调用。
答案 0 :(得分:16)
某些程序使用“@”语义从文件中输入args 例如。 gcc @argfile
其中,对于gcc,argfile包含选项
-ansi
-I/usr/include/mylib
这可以嵌套,以便argfile可以包含
-ansi
-I/usr/include/mylib
@argfile2
http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Overall-Options.html#Overall-Options
答案 1 :(得分:11)
您可以使用xargs
:
cat optionsfile | xargs gcc
编辑:我被低估了,因为Laurent不知道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
。
答案 2 :(得分:8)
gcc `cat file.with.options`
答案 3 :(得分:4)
我建议使用$()
和cat:
gcc $(cat file)
$()
关于反引号(经典方式)的好处是,将一个嵌套在另一个中更容易:
gcc $(cat $(cat filename))
答案 4 :(得分:2)
使用bash
gcc $(<file)
答案 5 :(得分:2)
大多数时候,命令替换(通过反引号 或$(),正如其他人所指出的那样)很好,但要注意shell 扩张规则。特别是,请记住,不引用已完成 在之前,命令替换后完成分词。
如果你的所有论点都是单词,那么这不是太糟糕 开始放空间或其他特殊字符 通常需要引用你的论点,然后你可能会见面 奇怪的结果(注意异常间距和引号) 输出):
$ echo "foo 'bar baz'" >a
$ echo $(cat a)
foo 'bar baz'
引用整个命令子句不是解决方案, 显然,因为它会阻止单词分裂(因此,你的整体 文件的内容将显示为一个长参数而不是多个参数 选项),并且不会对报价做任何事。
$ echo "$(cat a)"
foo 'bar baz'
解决此问题的一个解决方案是使用eval builtin:
$ eval echo "$(cat a)"
foo bar baz
N.B。:echo可能不是这里最好的示例命令;你可能想要 用其他东西替换它,例如以下功能:
$ f() { echo $#; }