2

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

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

参数列表太长

在生成文件中:

$(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)`
4

1 回答 1

2

使命令行更短的一种方法是不在$(FILE_LIST_TMP)每个回显中使用。相反,只需使用一次,如下所示:

(${FILE_SOURCE:%=echo %;}) > $(FILE_LIST_TMP)

现在而不是将其发送到外壳:

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行中省略该路径。

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

于 2013-05-16T15:17:00.937 回答