将二进制文件读入bash中的变量中

2023-12-07

我有以下 bash 脚本。我希望文件 out.1 和 out.2 相同,但它们是不同的。我怀疑问题在于 bash 如何处理二进制文件。那么在 bash 中将二进制文件读入变量的正确方法是什么?

curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt > out.1
A=`curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt`
echo "$A" >  out.2
diff out.1 out.2

bash 变量(以及环境变量、unix 参数等)不是二进制安全的。最大的问题是它们不能包含零字节(即 ASCII NUL 字符),因为那是字符串终止符。在某些情况下,最后删除/添加换行符也存在问题,并且某些版本echo将反斜杠字符视为需要解释的转义符。基本上,答案是:不要尝试在 shell 中存储二进制数据。

但是您可以将数据转换为非二进制格式(十六进制、base64、uuencode 等),并以该形式存储、传递等数据。只要确保在适当的地方转换格式即可。下面是使用 base64 的示例:

$ curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt > out.1
$ a=$(curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt | base64)
$ echo "$a" | base64 -d >out.2
$ diff -s out.*
Files out.1 and out.2 are identical

顺便说一句,我建议使用小写或混合大小写的变量名(有一堆具有特殊含义的全大写变量,并且意外使用其中一个可能会产生奇怪的效果),并且还使用$( )而不是反引号(更容易阅读,并避免一些晦涩的语法奇怪之处)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将二进制文件读入bash中的变量中 的相关文章

  • 无法在 Windows 10 上运行 Python 3.7“权限被拒绝”

    当尝试使用 Git Bash 在 Windows 10 上运行 Python 3 7 时 出现以下错误 python version bash c Users Name AppData Local Microsoft WindowsApps
  • Bash 脚本监听按键以继续

    因此 我想编写一个由一系列步骤组成的 bash 脚本 并将其标识为 task 然而 每个步骤都只能完成并且可以根据用户的需要运行 Do task1 if keypressed stop task1 and move on this is t
  • 如何使用 echo 写入非 ASCII 字符?

    如何写非ASCII http en wikipedia org wiki ASCII使用 echo 的字符 是否有转义序列 例如 012或类似的东西 我想使用以下方法将 ASCII 字符附加到文件中 echo gt gt file 如果您关
  • 通过 bash 从文件中检索电子邮件主题

    我有一个 shell 脚本 它将文件从服务器邮件文件夹下载到 NAS 设备 以便客户端拥有本地备份的副本 文件保存为11469448248 H15587P19346 smtp x14 eu 2 S文件 我已将扩展名更改为标准 eml 格式
  • Bash 脚本:将数组作为参数传递给函数并打印数组

    我将一个数组传递给一个函数并尝试打印该数组的每个元素 下面是数组参数周围带有引号的代码片段 bin bash print array array for i in array with quotes do echo i done ar 1
  • 卷曲:参数列表太长

    我想通过 Sparkpost API 使用curl post 发送一封附有pdf 文件的电子邮件 插入我使用的 pdf 我的 test pdf 约为 200KB data cat test pdf base64 wrap 0 但不知怎的 这
  • 如何从 mysqldump 中删除表

    如何删除 mysqldump 中包含大量表的一个大表的输出 我有一个 6 GB 大的数据库转储 但其中 90 只是一个日志记录表 cache entries 我的备份中不再需要它 如何轻松删除转储中描述大型日志记录表的部分 我找到了这个 h
  • 用于编辑 /etc/sudoers 文件的正则表达式模式

    我想删除 etc sudoers 文件中的 uncommnet 轮组 那么我应该使用什么正则表达式模式 cat etc sudoers Allows members of the sys group to run networking so
  • 使用 awk 解析日志文件

    我尝试使用以下代码解析日志文件 if line match then awk 2 vFiler echo vFiler 解释 有一些行以这样的模式开头 或 vol 后跟名称 我想找到所有以 或 vol 并将后面的字符串设置为等于变量 但我真
  • 在 Hadoop MapReduce 中为二进制文件创建自定义 InputFormat 和 RecordReader

    我正在编写一个 M R 作业 该作业处理以二进制格式编写的大型时间序列数据文件 如下所示 此处换行以提高可读性 显然 实际数据是连续的 TIMESTAMP 1 TIMESTAMP 1 TIMESTAMP 2 TIMESTAMP 2 TIME
  • 带有二进制数据的 Bash echo 命令?

    有人可以解释一下为什么这个脚本有时只返回十六进制字符串表示形式的 15 个字节吗 for i in 1 10 do API IV openssl rand 16 API IV HEX echo n API IV od vt x1 w16 a
  • wget 并行下载文件并重命名

    我有一个包含两列的文本文件 第一列是要保存的名称 第二列是资源的 url 地址 10000899567110806314 jpg http lifestyle inquirer net files 2018 07 t0724cheekee
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • 独特的 Linux 文件名,可按时间排序

    以前我用的是uuidgen http man7 org linux man pages man1 uuidgen 1 html创建唯一的文件名 然后我需要通过 bash 脚本按日期 时间迭代该文件名 从那时起 我发现简单地通过 ls l 循
  • sed 和 rev shell 命令转换为 Python 脚本 [重复]

    这个问题在这里已经有答案了 有一个shell命令 我正在尝试将逻辑转换为python 但我不知道该怎么办 我需要一些帮助 shell命令是这样的 cd tests src main test ls find name vrlp while
  • 通过 ssh 运行 Bash 脚本

    我正在尝试编写一个 Bash 脚本 它将通过 SSH 连接到计算机并创建一个目录 长期目标有点复杂 但现在我从简单的开始 然而 虽然很简单 但我似乎不太明白 这是我的代码 bin bash ssh T email protected cdn
  • 如何运行 bash 压缩脚本?

    有没有一种方法可以直接运行带有 参数 的压缩bash脚本 而无需将其解压缩到文件中 然后运行解压缩的文件 例如 我需要使用一些给定的参数执行 setup mysql gzip 压缩脚本 n wordpress locahost 而不先解压缩
  • 显示 GitHub 上二进制文件的文本差异

    我正在尝试使用 Git 和 GitHub 同步多个应用程序配置文件 这些是以二进制格式存储的 XML 或 plist 文件 例如 一个键盘大师 kmsync file https forum keyboardmaestro com t pl
  • EULA 接受 Bash 脚本

    我有一个尝试安装垃圾箱的脚本 除了 bin 在 more 中打开 EULA 之外 一切正常 在脚本再次开始并自行完成安装之前 您必须手动 ctrl c 退出此 more 实例 因为这更多的是逃离 shell 所以脚本在打开后不知道要运行什么

随机推荐

  • Android:设置蓝牙可发现性无限制

    在过去的几天里 我一直在尝试制作一个应用程序 让我的三星 Galaxy S3 mini Android 2 1 4 在 无限 的时间内被发现 我的代码目前如下所示 package com example downtoone import a
  • 将文件夹下载为 Zip Google Drive API

    我目前在 Google Sheet 中有一个 Google App 脚本 它为我提供了文件夹的 URL 然后我可以用它来下载 虽然这是一个额外的步骤 但我想删除它 并直接获取压缩内容的 URL 这是我的代码 谷歌应用程序脚本 functio
  • 如何在网页视图中显示外国字体

    我的应用程序必须在 Web 视图中显示 HtmlString 中的印地文文本 HtmlString div style padding 0px div div style padding 5px b SharedVariables Arra
  • 泡菜懒惰学习者

    Pickle 是否为像 KNeighborsClassifier 这样的懒惰学习者保存来自 scikit 的训练数据 如果是这样 我们可以从 pickle 对象访问这些数据吗 询问数据隐私问题 Eg knn fit Xtrain Ytrai
  • AMP 错误:缺少支持的结构化数据元素

    我有一个书籍聚合网站 我为每本书创建了专用的 AMP 加速移动页面 示例 AMP 网址 http konyvar hu amp nicholas sparks az utolso dal 规范 URL 示例 http konyvar hu
  • 如何保持元素:即使点击后仍处于活动状态

    从中得到了非常模糊和不需要的答案question所以我决定发布一个明确的问题来介绍我面临的问题 我正在使用的代码如下所示 flipClass font size Large background color 4399CD color fff
  • 在函数内执行 mysqli_query

    我有一个函数列表函数 php 我正在升级Mysql to Mysqli因为我刚刚学习Mysql现已弃用 我在顶级connect php 文件中声明我的连接 第一个文件是必需的 我所有的功能都使用mysql query QUERY 总是运行良
  • Telegram Api - 创建授权密钥 404 错误

    我正在尝试用 python 编写一个简单的程序来使用 telegram api 不是机器人 api 主要消息传递 api 现在我已经编写了这段代码 usr bin env python import socket import random
  • ASP.NET 自定义用户控件动态添加

    我很难将具有自定义用户控件的页面直接修改为 ASPX 页面 现在需要仅在需要时动态加载它 用户控件确实通过 ASCX 文件具有 html 和其他控件 并且在代码隐藏中具有代码 我已阅读多页 发现我无法直接实例化用户控件 但应该使用Page
  • Ubuntu 上的 Boost::system 链接错误

    我正在尝试编译以下实现上下文树切换的 C 代码 下载页面上有更多信息 Zip 存档 0 2 MB 这需要一些boost库 我从 boost org 下载了最新版本 并按照网站上的说明构建了所有需要构建的库 我还修改了存档中包含的 makef
  • 配置 emacs 以显示固定宽度的内嵌图像

    跟进 Emacs 组织显示内联图像 我按照 abo abo 的建议设法显示内联图像 现在我想为它们设置一个固定的宽度大小 设置 setq org image actual width 50 不起作用 Emacs 选择了该变量 但它没有对图像
  • 设置 ggplot 标题以反映 dplyr 分组

    我在 dplyr 中生成了一个分组数据框 其中每个组反映了因子变量水平的独特组合 我想使用类似的代码绘制不同的组this邮政 然而 我不知道如何在我的图的标题中包含两个 或更多 变量 这很麻烦 因为我有一堆不同的组合 假数据和绘图代码 li
  • scanf("%*[\n] %[^\n]", input_string); 是什么意思?做?

    我无法理解其中的区别 我用 n s 用于获取用户输入的短语 但当我需要添加两个短语时 这不起作用 但上面那个却做到了 请帮助我理解其中的区别 The n 指令告诉scanf 匹配换行符 以及 flag 表示不应进行任何分配 因此 n 跳过任
  • 使用intelliJ调试android中的后台服务

    我最近从 eclipse 切换到 IntelliJ 进行 Android 开发 由于更好的团队支持 项目 模块 但是 当我尝试调试后台服务时 似乎这是不可能做到的 有人成功让 IntelliJ 调试 bg 服务吗 非常感谢 本 有两种方法可
  • JavaScript 中动态加载的问题

    我是一名 JavaScript 新手 通过工作来学习pure计算数学函数的 JavaScript 项目 一切都运转良好 现在 作为进一步的一步 我想让消息传递多语言 该代码应该能够在运行时加载适当的语言文件 对于动态加载问题 我在网页上阅读
  • Matplotlib 自定义标记/符号

    So there is this guide http matplotlib org examples pylab examples scatter symbol html http matplotlib org examples pyla
  • 无法从 Alpha Vantage API 获取实时价格。价格为一天前的价格

    我正在尝试从 Alpha Vantage API 获取最新的盘中价格 目前是东欧时间星期五晚上 9 16 我正在尝试购买特斯拉股票 市场仍然开放 但是 API 调用仅返回昨天的数据 可能是什么问题呢 ts TimeSeries key AP
  • Powershell:将参数和管道输入转发到别名函数

    如何将所有管道输入和参数转发到别名函数内的命令 例如 如果我想给 tail 添加别名 function tail coreutils tail args 可以很好地配合tail n 5 test txt 但不与cat test txt ta
  • Bitbucket - 如何禁用奇怪的无意义的有色人[重复]

    这个问题在这里已经有答案了 我使用位桶 最近 每次按下按钮后 我开始在控制台中看到一个大个子黑人 自上周以来 它出现的频率越来越高 这使得我在控制台的登录时间更长 而且根本不方便工作 有什么方法可以完全禁用它吗 我不想看到它 我只想要吉特
  • 将二进制文件读入bash中的变量中

    我有以下 bash 脚本 我希望文件 out 1 和 out 2 相同 但它们是不同的 我怀疑问题在于 bash 如何处理二进制文件 那么在 bash 中将二进制文件读入变量的正确方法是什么 curl s http cacerts digi