Linux 如何使用文件内容作为命令行参数?
我想使用文件中的参数作为一些命令(如gcc或ls)的命令行参数 例如Linux 如何使用文件内容作为命令行参数?,linux,bash,Linux,Bash,我想使用文件中的参数作为一些命令(如gcc或ls)的命令行参数 例如gcc-o输出-Wall-Werro 该文件由以下部分组成: -o输出-墙壁-Werro 用于gcc命令行调用。您可以使用xargs: gcc `cat file.with.options` cat optionsfile | xargs gcc 编辑:我被否决了,因为劳伦特不知道xargs是如何工作的,所以这里有证据: $ echo "-o output -Wall -Werro" > optionsfile $ c
gcc-o输出-Wall-Werro
该文件由以下部分组成:
-o输出-墙壁-Werro
用于gcc命令行调用。您可以使用
xargs
:
gcc `cat file.with.options`
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
。使用bash
gcc $(<file)
gcc$(我建议将$()
与cat一起使用:
gcc $(cat file)
$()
优于backticks(经典方式)的好处在于,更容易将一个嵌套在另一个中:
gcc $(cat $(cat filename))
大多数情况下,命令替换(通过反勾号
或者,正如其他人指出的那样,$()是可以的,但是要当心shell
扩展规则。尤其要记住,取消引用是完成的
在命令替换之前和之后执行单词拆分
如果你所有的论点都是文字,但如果你
开始放置空格或其他特殊字符,以便
通常需要在你的论点中引用,然后你可能会遇到
结果奇怪(请注意中的异常间距和引号)
输出):
引用整个命令子替换不是解决方案,
显然,因为它可以防止分词(因此,您的整个
文件的内容将显示为一个长参数,而不是多个
选项),并且不会对引号做任何处理
$ echo "$(cat a)"
foo 'bar baz'
一种解决方案是使用eval内置:
$ eval echo "$(cat a)"
foo bar baz
注意:echo可能不是这里最好的示例命令;您可能希望
将其替换为其他功能,例如以下功能:
$ f() { echo $#; }
有些程序使用“@”语义从文件中输入参数
例如gcc@argfile
其中,对于gcc,argfile包含选项
-ansi
-I/usr/include/mylib
这可以嵌套,以便argfile可以包含
-ansi
-I/usr/include/mylib
@argfile2
gcc$(cat filename.txt)
--可能需要引号。请注意,这些是反勾号,而不是单引号。@Laurent,这是完全错误的。我编写的命令执行gcc-o output-Wall-Werro
。如果您不相信,请自己尝试。甚至“xargs gcccmd
中达到8196个字符限制,则会遇到更大的问题。任何足以理解$()
语法的现代工具也知道如何打开和重定向文件本身,避免使用无用的cat
过程。例如,gcc$(
-ansi
-I/usr/include/mylib
@argfile2