amb*_*air 5 macos ubuntu base64
我试图使用base64,但脚本无法在Ubuntu机器上成功运行
MYCOMMAND=$(base64 commands.sh)
Run Code Online (Sandbox Code Playgroud)
所以在Ubuntu中,我必须使用
MYCOMMAND=$(base64 -w0 commands.sh)
Run Code Online (Sandbox Code Playgroud)
很遗憾,Mac中没有此选项.如何编写一个在Mac和Ubuntu中运行的脚本
dec*_*eze 24
是的,默认的macOS base64实现没有-w标志.那面旗子做什么?
Run Code Online (Sandbox Code Playgroud)-w, --wrap=COLS在COLS字符后包装编码行(默认为76).使用0禁用换行.
这是macOS手册页base64:
Run Code Online (Sandbox Code Playgroud)-b count --break=count在每个计数字符处插入换行符.默认值为0,生成不间断的流.
因此,该标志-b在macOS中被调用,并且它已经默认为0,这意味着base64在macOS中具有与base64 -w0在Linux上相同的行为.您必须检测您运行的平台才能使用该命令的相应变体.请参见此处:从Bash脚本中检测操作系统 ; 您正在寻找macOS的平台名称是"Darwin".
ori*_*rip 10
在 Mac 中它是-b,默认值已经是 0。
$ man base64
...
OPTIONS
The following options are available:
-b count
--break=count Insert line breaks every count characters. Default is 0, which generates an unbroken stream.
...
Run Code Online (Sandbox Code Playgroud)
让脚本同时工作的一种方法是检查错误:
MYCOMMAND=$(base64 -w0 commands.sh)
if [ $? -ne 0 ]; then
MYCOMMAND=$(base64 commands.sh)
fi
Run Code Online (Sandbox Code Playgroud)
您还可以运行显式测试,例如
echo | base64 -w0 > /dev/null 2>&1
if [ $? -eq 0 ]; then
# GNU coreutils base64, '-w' supported
MYCOMMAND=$(base64 -w0 commands.sh)
else
# Openssl base64, no wrapping by default
MYCOMMAND=$(base64 commands.sh)
fi
Run Code Online (Sandbox Code Playgroud)
一种同时适用于 Linux 和 MacOS 的解决方案是使用tr:
MYCOMMAND=$(base64 commands.sh | tr -d '\n')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4755 次 |
| 最近记录: |