将环境变量设置为较大的值 - >“参数列表太长”

2023-11-23

在 bash 脚本中,我设置了一个环境变量来包含 100 万个字符的字符串。我这样做是这样的:

export LG=XXXXXXX # ... 1 million X's

在此之后,我可以毫无问题地回显它,即

echo $LG

但是,在此之后我尝试在脚本内运行的任何其他不相关命令都会失败,并出现“参数列表太长”错误。例如:

cat randomfile.txt
/bin/cat: Argument list too long

我读过其他建议使用 xargs 来解决此类问题的帖子,但我没有成功。如果我使用 echo 以外的任何命令,那么即使我在设置 $LG 变量后实际上没有使用它,也会收到“参数列表太长”错误。我当然想使用$LG变量,但是设置后即使不使用也会出现错误。

任何提示将不胜感激,谢谢!

Edit:

我试图解决的总体问题是这样的:

我有一个文本文件,需要保持尽可能小(即几 MB)。该文本文件包含一组封装在特定网络协议内的消息(即标头、消息长度、消息本身)。消息本身可以是长度为100万或更长的字符串。因此,为了保持原始文件大小较小,我使用映射,而不是在文件内保留大消息的多个副本。 IE。如果我在消息字段中看到字母 A,我就会使用 sed 查找 A 并将其替换为 100 万个 X。像这样:

cat file.txt | sed "s/A/$LG/g"  # Replace A with 1 million X's

我最终将在(非常慢的)模拟器中运行此操作,因此我需要在尽可能少的周期内完成此操作。换句话说,像 awk 这样使用行程计数为 100 万次的循环来动态生成 100 万个 X 的实用程序会太慢。这就是为什么我认为环境变量解决方案是最好的。


命令行参数和环境变量都来自同一个空间池。将环境变量设置得太长,您将不再有空间用于命令行参数 - 甚至xargs,它将命令行调用分解为更小的分组,以尽可能适合池内,当池完全满时无法运行。

所以:不要这样做。例如,您可以将数据存储在文件中,并导出环境中该文件的路径。


顺便说一下——原因echo其工作原理是它内置于您的 shell 中。因此,

echo "$LG"

...不需要启动外部进程,因此进程启动时参数列表长度和环境大小的限制不适用。

另一方面,如果你跑了

/bin/echo "$LG"

...然后你会再次看到问题。


鉴于编辑到问题中的解释是关于您实际想要完成的任务,让我建议一种既不需要环境空间也不需要命令行空间的方法:

#!/bin/bash
#      ^-- also consider ksh; faster than bash, but also supports <()
#          /bin/sh is not usable here, as POSIX sh does not specify <().

lg=... ## DO NOT USE export HERE!
sed -f <(printf '%s\n' "s/A/$lg/g")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将环境变量设置为较大的值 - >“参数列表太长” 的相关文章

随机推荐

  • Azure 上的 Orchard 性能

    Using http docs orchardproject net Documentation Deploying Orchard to Windows Azure我已成功将 Orchard 部署到 Azure 中 每 20 分钟左右没有
  • 如何运行除 docker 容器中的步骤之外的所有 jenkins 管道步骤

    我正在尝试设置一个 jenkins 多分支管道来在 docker 容器中运行所有代码验证步骤 然后构建 docker 映像并将其推送到所述 docker 容器之外 目前 我的 Jenkinsfile 看起来有点像这样 为了可读性而缩小 pi
  • 创建 React Native 应用程序。 - 插件/预设文件不允许导出对象,只能导出函数

    需要一些帮助 我在左字段中遇到了一个奇怪的错误 但我无法调试 直到昨天我在另一台 Mac 上设置了 React Native 项目后 该项目才成功捆绑 我想知道这是否来自我必须重新安装的 npm 软件包的版本控制 任何方向都会有帮助 它总是
  • Android Facebook API 和 ShareLinkContent

    对于我的 Android 应用游戏 我实现了一个按钮 允许用户分享游戏结果 我已经集成了 Facebook SDK 因此我的项目知道所有类 清单包含以下标签
  • iOS Setter 和 Getter 以及带下划线的属性名称

    所以我有一个名为description的NSString属性 定义如下 property strong nonatomic NSMutableString description 当我定义 getter 时 我可以将其称为 descript
  • strtotime 使用不同的语言?

    strtotime 是否仅适用于服务器上的默认语言 下面的代码应解析为 2005 年 8 月 11 日 但它使用法语 aout 而不是英语 aug 有什么想法如何处理这个问题吗 法国月份日期是 詹维尔 费夫里尔 马尔斯 艾薇儿 麦朱因 朱耶
  • nginx中的request_time如何小于upstream_response_time?

    我明白nginx是如何request time可以大于upstream response time 它只是意味着 nginx 和客户端之间的网络连接速度很慢 我不明白的是如何request time可以少一点吗 我分析了 nginx 日志
  • JavaScript 和 CSS 顺序

    我有一个 HTML 文件 它链接到 CSS 文件和 JavaScript 文件 是先执行 JavaScript 再应用 CSS 还是反之亦然 有什么办法可以改变顺序吗 Thanks 通常认为将脚本导入为好主意late尽可能 你的样式表ear
  • 如何获取 Unity 着色器属性的完整列表

    我对着色器还很陌生 一直在寻找 Unity 着色器属性的完整列表 我还没有找到任何这样的文档 我发现的是SL 属性 在哪里可以找到属性及其功能的完整列表 UPDATE 给出了一个例子SL 属性显示水着色器的属性列表 即 WaveScale
  • SQL 中的 NOT IN 条件

    谁能告诉我 SQL 中两列的 NOT IN 条件的确切语法 这是我用 VBA 编写的查询 strNewSql SELECT distinct tblRevRelLog Detail PartNumber tblRevRelLog Detai
  • 使用 CMake 使用 /MT 而不是 /MD 进行编译

    我在 Windows 上使用 CMake 以及 Windows SDK 和 NMake Makefiles 默认情况下它编译时使用 MD编译器开关 我怎样才能改变它来编译 MT改为切换 您可以修改CMAKE
  • 编辑大型文本文件中的单行

    所以我需要记录一组 4 个整数 它们的值在一天中的每一秒都不同 IE Here the values are initialized to the same value however they will change as samples
  • EPPlus:将样式复制到范围

    我想将新行 列插入到工作表中 并应用插入的行 列的样式 背景颜色 边框等 这就是我添加新行的方式 xlsSheet InsertRow 18 RowCount 然后我想将 基 行的样式复制 应用到新插入的行 for int i 0 i lt
  • 从 Perl 创建的文本文件有行长度限制吗?

    在编写 Perl 脚本时 我需要在文件的一行中仅写入以逗号分隔的用户名 这就是为什么我想知道 txt 文件中行的最大大小是否有任何限制 文本文件就像任何其他文件一样 换行符与任何其他字符一样 因此仅适用通常的文件大小限制 旧文件系统上的 4
  • 接收远程推送通知时打开视图控制器

    我正在使用 Storyboard 当用户收到远程推送通知时 我想始终打开相同的视图 即使应用程序位于后台或打开 我需要呈现的视图是故事板中设置的初始视图控制器之后的四个视图 我读过这篇文章 如何将响应通知的模态视图显示为新窗口 无父VC 当
  • 直接包含文本的元素的 jQuery 选择器?

    我能够使用 contains选择器 但我的问题是 如果一个元素包含一个包含它仍然返回的文本的元素 例如 div contains test 将选择下面的两个 div div something else div test div div f
  • 为什么将 EntityState 设置为 Detached 会清空 List 类型的属性?

    首先使用实体 框架代码 我有类似的东西 public class Foo public int Id get set public List
  • 将字符串中的字母与数字分开

    我正在处理这样的字符串 125A12C15 我需要在字母和数字之间的边界处将它们分开 例如这个应该成为 125 A 12 C 15 在Python中是否有比逐个位置检查它并检查它是字母还是数字 然后相应地连接更优雅的方法 例如 此类事情的内
  • HTML 未在 Django 文本字段中呈现

    我试图使用 markdown 来避免在 wiki 表单中输入 HTML 但由于某种原因 表单显示的是 HTML 代码而不是预期的格式 我的视图函数如下 from django shortcuts import render to respo
  • 将环境变量设置为较大的值 - >“参数列表太长”

    在 bash 脚本中 我设置了一个环境变量来包含 100 万个字符的字符串 我这样做是这样的 export LG XXXXXXX 1 million X s 在此之后 我可以毫无问题地回显它 即 echo LG 但是 在此之后我尝试在脚本内