如何将一个非常长的参数列表传递给程序

How to pass a very very long list of arguments to a program?

本文关键字:列表 参数 程序 非常 一个      更新时间:2023-10-16

我正在编写和运行程序,需要向这些程序传递一长串数据文件进行分析,有时需要几十万。问题是,参数列表可能太长,以至于系统(Unix)拒绝运行它,输出:

bash: ./yourProgram: Argument list too long

有没有一个环境变量我可以改变以绕过这个障碍?

我能想到的唯一解决方案是将我的程序列表写在一个单独的文件中(使用ls ... >),然后逐行读取每个文件。你知道什么更简单的吗?

ps:如果重要的话,我的程序是用C++编写的

最好将环境变量定义为以空格分隔的项目列表,例如,定义为

export MYLIST=a b ab cd ef

在您的程序中,使用getenv("MYLIST")以char*形式获取值,并标记化以获取单个值

我会将其作为stdin传递。。

echo "file1 file2 file3" | ./program

如何将一个非常长的参数列表传递给程序?

  1. 将参数放在文件中
  2. 在启动时,将文件重定向到应用程序的标准输入

    bash$ echo "arg1 arg2 arg3 ... argn" >> inputs.txt
    bash$ ./yourProgram  < inputs.txt
    

这具有存储参数的优点(因此,对于后续执行,您只需要运行第二行)。