我想将内容转储到列表中,但我现在不知道如何解决这个问题。
当我尝试显示列表中的所有元素时,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)`
答案 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
中的那条路径线。
然而,如果列表足够长,即使这可能最终还不够。