我想将内容转储到列表中,但我现在不知道如何解决这个问题。
当我尝试显示列表中的所有元素时,shell 显示:
arguments list too long
在 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)`
最佳答案
使命令行更短的一种方法是不在每个回显中使用 $(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
中的文件都位于具有公共(public)路径的子目录中,那么您可以在其中省略该路径echo
线。
但是,如果列表足够长,即使这样最终也可能不够。
关于linux - "Argument list too long"显示所有列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583599/