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

使用linux如何将文件内容作为参数传递给可执行文件?,linux,Linux,假设我想用一个字符串参数运行./program 而不是打字 ./program字符串每次,我该怎么办。/program包含字符串的文件在哪里 谢谢这应该可以做到: ./program `cat file` 如果希望在单个参数中包含整个文件内容,请添加在bash中测试的双引号。我认为壳牌公司的情况可能会有所不同: ./program "`cat file`" 命令 解释 $cmd运行命令并将其输出转换为字符串$cmd也可以用backticks写成`cmd`。我更喜欢新的$cmd,因为它的嵌套

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

而不是打字 ./program字符串每次,我该怎么办。/program包含字符串的文件在哪里


谢谢

这应该可以做到:

./program `cat file`
如果希望在单个参数中包含整个文件内容,请添加在bash中测试的双引号。我认为壳牌公司的情况可能会有所不同:

./program "`cat file`" 
命令 解释 $cmd运行命令并将其输出转换为字符串$cmd也可以用backticks写成`cmd`。我更喜欢新的$cmd,因为它的嵌套效果比老式的backticks要好

我们需要的命令是cat file。然后从bash手册页:

命令替换$cat文件可以替换为等效但更快的$<文件

它周围的引号确保保留空白,以防文件中有空格或换行符。在shell脚本中正确引用内容是一项非常缺乏的技能。引用变量和命令替换是一个很好的习惯,这样当文件名或变量值有空格、控制字符或其他奇怪之处时,您就不会晚了一点

您可以使用以下选项之一:

./program $(cat file)
./program "$(cat file)"
如果文件中可能有多个单词,并且希望将它们视为单个参数,则后者非常有用。在任何情况下,我更喜欢使用if$to backticks,这仅仅是因为它具有嵌套功能,在这种情况下,这可能不是必需的

还要记住,这个答案和其他答案更多地与正在使用的shell相关,而不是与Linux本身相关。由于主要的和最好的:-shell似乎是bash,所以我专门为此编写了代码

这实际上是在UNIX外观下杀死进程的一种相当常见的方法。像cron这样的守护进程会将其进程ID写入像/var/cron.pid这样的文件中,您可以用如下内容向其发送信号:

kill -HUP $(cat /var/cron.pid)

另一个选项是xargs:

cat file | xargs ./program
我个人觉得这个版本更容易阅读,尤其是如果你不仅仅是处理一个文件

从手册页:

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

简单地说,xargs将在通过管道传输到它的每一行/字上执行./program


有关更多选项,请参见man xargs。

以上所有答案都有效,但我发现最干净、最容易键入的选项是

xargs < file ./program

这是@robbrit answer的扩展

考虑一个包含以下内容的file.txt文件:

1 2 3
4 5 6
#include<stdio.h>
void main(int argc, char** argv) 
{ 
    for (int i = 0; i < argc; i++) 
        printf("Arg %d: %s\n", i, argv[i]); 
}
以及包含以下内容的a program.c:

1 2 3
4 5 6
#include<stdio.h>
void main(int argc, char** argv) 
{ 
    for (int i = 0; i < argc; i++) 
        printf("Arg %d: %s\n", i, argv[i]); 
}

更妙的是,放下cat并使用xargs的-a选项,它将从文件中读取项目,而不是标准输入。@Habeeberwad这两种方法有什么区别?@Donentolon,我已经编写了一个示例,作为对这个问题的单独回答。看见