linux - "Argument list too long"显示所有列表元素

标签 linux shell unix makefile command-line-arguments

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

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

相关文章:

linux - ColdFusion/Linux multipart/form-data 编码文件上传问题

linux - Shell 递归地重命名大量文件

linux - 无法在jboss中使用部署命令执行shell脚本

perl - 如何在 unix 中守护任意脚本?

Linux递归复制文件到其父文件夹

linux - 检查从同一 bash 脚本启动的后台进程的运行状态

java - 从 Java 调用带有重定向的 bash 脚本

html - 从 Linux 服务器发送电子邮件作为 html - 内容类型和 html 标签在电子邮件中也可见

c - 如何在不阻塞的情况下捕获 unix 控制台应用程序中的单个击键?

shell - 如何在目录及其子目录上递归使用 tail -f ?