比如说,我有一个文件foo.txt,指定了N个参数

arg1
arg2
...
argN

我需要传递给命令my_command

如何使用文件的行作为命令的参数?


当前回答

下面是我如何将文件内容作为参数传递给命令:

./foo --bar "$(cat ./bar.txt)"

其他回答

下面是我如何将文件内容作为参数传递给命令:

./foo --bar "$(cat ./bar.txt)"

如果你所需要做的就是将文件arguments.txt的内容

arg1
arg2
argN

进入my_command arg1 arg2 argN,然后你可以简单地使用xargs:

xargs -a arguments.txt my_command

你可以在xargs调用中添加额外的静态参数,比如xargs -a arguments.txt my_command staticArg,它将调用my_command staticArg arg1 arg2 argN

你可以使用反勾:

echo World > file.txt
echo Hello `cat file.txt`

如果你的shell是bash, $(cat afile)的快捷方式是$(< afile),所以你可以这样写:

mycommand "$(< file.txt)"

bash手册页中的“命令替换”部分中有详细说明。

或者,让你的命令从stdin读取,这样:mycommand < file.txt

这些答案似乎都不适合我,也不是太复杂。幸运的是,xargs并不复杂(在Ubuntu 20.04上测试)。

正如OP提到的那样,这适用于文件中单独一行的每个参数,也是我所需要的。

cat foo.txt | xargs my_command

需要注意的一点是,它似乎不适用于别名命令。

如果命令接受一个字符串中包装的多个参数,则接受的答案有效。在我使用(Neo)Vim的情况下,它不会和参数都粘在一起。

Xargs正确地做到了这一点,实际上为命令提供了单独的参数。