在bash脚本中,我设置了一个环境变量来存储一个包含100万个字符的字符串。我是这样做的:
export LG=XXXXXXX # ... 1 million X's
紧接着这个,我能够毫不费力地回响它,也就是说:
echo $LG
然而,在脚本中运行此命令后,我尝试运行的其他无关命令均失败并显示“参数列表过长”错误。例如:
cat randomfile.txt
/bin/cat: Argument list too long
我阅读了其他帖子,建议使用xargs来解决此问题,但我没有成功。如果我使用除echo以外的任何命令,即使在设置$LG变量后实际上不使用它,我也会收到“参数列表过长”的错误。当然,我想使用$LG变量,但即使在设置后不使用它,该错误也会发生。
任何提示将不胜感激,谢谢!
编辑:
我试图解决的整体问题类似于这样:
我有一个文本文件,需要尽可能保持较小(即几MB)。此文本文件包含一组嵌套在特定网络协议中(即标题、消息长度、消息本身)的消息。消息本身可以是具有100万个或更多字符长度的字符串。因此,为了使原始文件大小保持较小,而不是在文件中有多个大型消息的副本,我使用映射。例如,如果我在消息字段中看到字母A,那么我就使用sed查找并替换A为1百万个X。就像这样:
cat file.txt | sed "s/A/$LG/g" # Replace A with 1 million X's
我最终将在(非常慢的)模拟器内运行此操作,因此需要尽可能少的周期完成此操作。换句话说,使用循环和1百万次计数器来动态生成1百万个X的实用程序(如awk)将太慢。这就是为什么我认为环境变量解决方案最好。
sed "s/A/$LG/g"
并不会在环境中查找LG
的值;它只是替换一个普通的 shell 变量;你可以设置LG=...
而不需要任何export
,仍然可以以这种方式使用它。(请注意,你可能会因为 sed 命令太大而无法存储在命令行上而遇到麻烦,但你可以通过将要运行的脚本传递给 sed 通过文件描述符来解决这个问题)。 - Charles Duffy