Linux &引用;“参数列表太长”;在中显示所有列表元素

Linux &引用;“参数列表太长”;在中显示所有列表元素,linux,shell,unix,makefile,command-line-arguments,Linux,Shell,Unix,Makefile,Command Line Arguments,我想将内容转储到列表中,但我现在不知道如何解决此问题 当我尝试显示列表中的所有元素时,shell显示: 参数列表太长 在Makefile中: $(FILE_SOURCE:%= echo % >> $(FILE_LIST_TMP);) 信息: execvp: /bin/sh: Argument list too long 有没有其他方法可以在不重新编译内核的情况下解决这个问题 如果有任何建议,我将不胜感激。谢谢 现在我使用perl来解决这个问题。以下是我的方法: while rea

我想将内容转储到列表中,但我现在不知道如何解决此问题

当我尝试显示列表中的所有元素时,shell显示:

参数列表太长

在Makefile中:

$(FILE_SOURCE:%= echo % >> $(FILE_LIST_TMP);)
信息:

execvp: /bin/sh: Argument list too long
有没有其他方法可以在不重新编译内核的情况下解决这个问题

如果有任何建议,我将不胜感激。谢谢

现在我使用perl来解决这个问题。以下是我的方法:

while read line; do
  perl -e 'print "$$ARGV[0]\n"' $$line >> $(FILE_LIST_TMP) ; \
done < $(FILE_SOURCE)`
读行时
;做
perl-e'print“$$ARGV[0]\n”$$line>>$(文件列表\u TMP)\
完成<$(文件源)`

缩短命令行的一种方法是不要在每个echo中使用
$(FILE\u LIST\u TMP)
。相反,只需使用一次,如下所示:

(${FILE_SOURCE:%=echo %;}) > $(FILE_LIST_TMP)
现在,不要将其发送到shell:

echo foo >> my_temp_file ; echo bar >> my_temp_file ; echo baz >> my_temp_file; ..
您将使用以下命令:

(echo foo; echo bar; echo baz;) > my_temp_file
这将大大缩短,尤其是当文件数量变大时,尤其是当临时文件名变长时

您可以玩的另一个技巧是,如果
FILE\u SOURCE
中的文件都位于具有公共路径的子目录中,则可以在
cd
中删除
echo
行中的路径


但是,如果列表足够长,即使这样最终也可能不够。

这里的两个示例完全不同。在第一个示例中,
FILE\u SOURCE
似乎是一个包含长文件列表的make变量,而在第二个示例中,
FILE\u SOURCE
似乎是一个包含长文件列表的文件名的make变量。你的情况如何?如果您演示如何定义
FILE\u SOURCE
,我们可以提供更多帮助。请注意,对于第二个示例,您可以运行
cp$(FILE\u SOURCE)$(FILE\u LIST\u TMP)
,这将更简单、更快。从GNU make 4.0及更高版本开始,您还可以使用
file
函数让make在调用shell之前先将内容写入文件。看见