【问题标题】:"Argument list too long" in display all list elements显示所有列表元素中的“参数列表太长”
【发布时间】:2013-05-11 02:52:43
【问题描述】:

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

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

【问题讨论】:

  • 你这里的两个例子完全不同。在第一个中,FILE_SOURCE 似乎是一个包含一长串文件的 make 变量,而在第二个中,FILE_SOURCE 似乎是一个包含一长串文件的文件名的 make 变量.你的情况如何?如果您展示如何定义 FILE_SOURCE,我们可以提供更多帮助。
  • 请注意,对于第二个示例,您只需运行cp $(FILE_SOURCE) $(FILE_LIST_TMP),这会简单得多,速度也快得多。

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


【解决方案1】:

使命令行更短的一种方法是不要在每个回显中都使用$(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 行中省略该路径。

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

【讨论】:

猜你喜欢
  • 2010-10-20
  • 2019-06-03
  • 2017-11-30
  • 2020-05-09
  • 2014-05-21
  • 2015-04-04
  • 2021-10-26
  • 2014-04-18
相关资源
最近更新 更多