使用linux如何将文件的内容作为参数传递给可执行文件?

al *_* b. 28 linux

假设我想./program用字符串参数运行

而不是./program string每次都输入 ,我怎么能在./program <file>哪里做<file>一个包含字符串的文件?

谢谢

rob*_*rit 49

这应该做的伎俩:

./program `cat file`
Run Code Online (Sandbox Code Playgroud)

如果你想在一个参数中使用整个文件内容,可以添加双引号(在bash中测试.我认为它可能因shell而异):

./program "`cat file`" 
Run Code Online (Sandbox Code Playgroud)


Joh*_*ica 29

命令

./program "$(< file)"
Run Code Online (Sandbox Code Playgroud)

说明

  1. $(cmd)运行命令并将其输出转换为字符串.$(cmd)也可以用反引号书写`cmd`.我更喜欢新的,$(cmd)因为它比旧学校的反对更好.

  2. 我们想要的命令是cat file.然后从bash手册页:

    命令替换$(cat file)可以替换为等效但更快$(< file).

  3. 它周围的引号确保保留空格,以防你的文件中有空格或换行符.正确引用shell脚本中的内容是一项非常缺乏的技能.引用变量和命令替换是一个很好的习惯,因此当文件名或变量值具有空格或控制字符或其他怪异时,您不会稍后得到它.


pax*_*blo 5

你可以使用以下之一:

./program $(cat file)
./program "$(cat file)"
Run Code Online (Sandbox Code Playgroud)

如果文件中可能有多个单词并且您希望将它们视为单个参数,则后者非常有用.在任何情况下,我更喜欢使用,如果$()以反引号只是由于它的能力巢(这可能不是一个要求,在这种情况下).

还要记住,这个答案(以及其他答案)与使用中的shell有关,而不是Linux本身.由于主要的和最好的:-) shell似乎是bash,我已经专门为此编码.

这实际上是在UNIX相似的情况下杀死进程的一种相当常见的方法.守护进程(如cron)会将其进程ID写入文件(如/var/cron.pid),您可以通过以下方式发出信号:

kill -HUP $(cat /var/cron.pid)
Run Code Online (Sandbox Code Playgroud)


Mat*_*hew 5

另一种选择是xargs:

cat file | xargs ./program
Run Code Online (Sandbox Code Playgroud)

我个人觉得这个版本更容易阅读,特别是如果你做的不仅仅是捕捉文件.

从手册页:

xargs从标准输入读取项目,由空格或换行符分隔,并使用任何初始参数执行命令一次或多次,后跟从标准输入读取的项目.

简单来说,xargs将对每个传送给它的行/单词执行./program.

有关更多选项,请参阅man xargs.

  • 更好的是,放下猫并使用xargs的-a <file>选项,它将从文件中读取项目而不是标准输入. (3认同)