在我最近升级到 macOS 13 (Ventura) 之前,我可以运行这个 Bash 命令,在我偶尔使用的脚本中将 JPEG 图像转换为 Base64 字符串:
IMAGE_BASE64=$(base64 -b0 /path/to/image.jpg);
结果IMAGE_BASE64
值可以用作$IMAGE_BASE64
我的脚本中的变量。
但我最近尝试在 macOS 13 (Ventura) 中再次使用此脚本,但此base64
命令失败并出现以下错误:
base64: invalid argument -b0
Usage: base64 [-hDd] [-b num] [-i in_file] [-o out_file]
-h, --help display this message
-Dd, --decode decodes input
-b, --break break encoded string into num character lines
-i, --input input file (default: "-" for stdin)
-o, --output output file (default: "-" for stdout)
将命令切换为 use-i
似乎可以解决问题:
IMAGE_BASE64=$(base64 -i /path/to/image.jpg);
但是这两个命令有什么区别呢?
-b0
macOS 13 (Ventura) 之前在做什么,-i
现在在 macOS 13 (Ventura) 中处理?
会回答我自己的问题。
两个“陷阱”抓住了我,希望这个答案能帮助将来处于类似位置的人:
-b0
需要设置为当今-b 0
。-i
需要 来指示输入文件是什么。因此,简单地
-b0
在 macOS 13 (Ventura) 中进行设置是行不通的。它需要是-b 0 -i
。更多细节如下。与
-b0
换行符相关,相当于--break=0
当该选项设置为0
禁用换行符时,这就是人们想要的 Base64 编码二进制图像数据;没有换行符!在此 Mac OS X 10.7 手册页中
base64
找到的详细信息以及说明的手册页base64
:知道这一点后,此命令会在 macOS 13 (Ventura) 中中断:
但是这个微小的变体,在输入文件之间
-b
和0
以及-i
输入文件之间有一个空格,可以工作:但是
-i
现在输入文件的 似乎是必需的,不再只是暗示路径是命令中的最后一项。多么微妙的令人困惑的头痛。