假设我想./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)
$(cmd)运行命令并将其输出转换为字符串.$(cmd)也可以用反引号书写`cmd`.我更喜欢新的,$(cmd)因为它比旧学校的反对更好.
我们想要的命令是cat file.然后从bash手册页:
命令替换
$(cat file)可以替换为等效但更快$(< file).
它周围的引号确保保留空格,以防你的文件中有空格或换行符.正确引用shell脚本中的内容是一项非常缺乏的技能.引用变量和命令替换是一个很好的习惯,因此当文件名或变量值具有空格或控制字符或其他怪异时,您不会稍后得到它.
你可以使用以下之一:
./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)
另一种选择是xargs:
cat file | xargs ./program
Run Code Online (Sandbox Code Playgroud)
我个人觉得这个版本更容易阅读,特别是如果你做的不仅仅是捕捉文件.
从手册页:
xargs从标准输入读取项目,由空格或换行符分隔,并使用任何初始参数执行命令一次或多次,后跟从标准输入读取的项目.
简单来说,xargs将对每个传送给它的行/单词执行./program.
有关更多选项,请参阅man xargs.