“参数列表太长”显示所有列表元素

时间:2013-05-16 09:23:16

标签: linux shell unix makefile command-line-arguments

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

当我尝试显示列表中的所有元素时,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)`

1 个答案:

答案 0 :(得分:2)

使命令行更短的一种方法是不在每个回声中使用$(FILE_LIST_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_SOURCE中的文件都在一个具有公共路径的子目录中,那么你可以玩的另一个技巧就是cd那里你可以省略echo中的那条路径线。

然而,如果列表足够长,即使这可能最终还不够。