比如说,我有一个文件foo.txt,指定了N个参数
arg1
arg2
...
argN
我需要传递给命令my_command
如何使用文件的行作为命令的参数?
比如说,我有一个文件foo.txt,指定了N个参数
arg1
arg2
...
argN
我需要传递给命令my_command
如何使用文件的行作为命令的参数?
当前回答
我建议使用:
command $(echo $(tr '\n' ' ' < parameters.cfg))
只需修改结束行字符并将其替换为空格,然后使用echo将结果字符串作为可能的单独参数推入。
其他回答
如果你的shell是bash, $(cat afile)的快捷方式是$(< afile),所以你可以这样写:
mycommand "$(< file.txt)"
bash手册页中的“命令替换”部分中有详细说明。
或者,让你的命令从stdin读取,这样:mycommand < file.txt
你可以使用反勾:
echo World > file.txt
echo Hello `cat file.txt`
这些答案似乎都不适合我,也不是太复杂。幸运的是,xargs并不复杂(在Ubuntu 20.04上测试)。
正如OP提到的那样,这适用于文件中单独一行的每个参数,也是我所需要的。
cat foo.txt | xargs my_command
需要注意的一点是,它似乎不适用于别名命令。
如果命令接受一个字符串中包装的多个参数,则接受的答案有效。在我使用(Neo)Vim的情况下,它不会和参数都粘在一起。
Xargs正确地做到了这一点,实际上为命令提供了单独的参数。
在我的bash shell下面的工作就像一个魅力:
cat input_file | xargs -I % sh -c 'command1 %; command2 %; command3 %;'
input_file在哪里
arg1
arg2
arg3
显然,这允许您对input_file中的每一行执行多个命令,这是我在这里学到的一个不错的小技巧。
下面是我如何将文件内容作为参数传递给命令:
./foo --bar "$(cat ./bar.txt)"