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

时间:2014-09-25 09:31:53

标签: c++ command-line-arguments

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

bash: ./yourProgram: Argument list too long

我是否可以更改环境变量以绕过此障碍?

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

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

3 个答案:

答案 0 :(得分:2)

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

export MYLIST=a b ab cd ef

在你的程序中,使用getenv(“MYLIST”)将值作为char *获取,并使用tokenize来获取单个值

答案 1 :(得分:2)

我会把它作为标准输入传递给它。

echo "file1 file2 file3" | ./program

答案 2 :(得分:1)

  

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

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

    bash$ echo "arg1 arg2 arg3 ... argn" >> inputs.txt
    bash$ ./yourProgram  < inputs.txt
    
  3. 这具有存储参数的优点(因此,对于后续执行,您只需要运行第二行)。