ubuntu base64在Mac中没有-w选项

az31mfrm  于 2023-01-08  发布在  Mac
关注(0)|答案(3)|浏览(183)

我尝试使用base64,但脚本在Ubuntu计算机中无法成功运行

MYCOMMAND=$(base64  commands.sh)

所以在Ubuntu中,我必须使用

MYCOMMAND=$(base64 -w0 commands.sh)

不幸的是,这个选项在Mac中没有。2我怎样才能编写一个在Mac和Ubuntu中都能运行的脚本呢

pgpifvop

pgpifvop1#

是的,默认的macOS base64实现没有-w标志。该标志有什么作用?

-w, --wrap=COLS

COLS字符后的编码行换行(默认值为76)。使用0禁用换行。
下面是base64的macOS手册页:

-b count
--break=count

每隔count个字符插入换行符。默认值为0,这将生成一个完整的流。
因此,该标志在macOS中称为-b,并且默认为0,这意味着macOS中的base64与Linux中的base64 -w0具有相同的行为。您必须检测您运行的平台,以使用该命令的适当变体。Detect the OS from a Bash script;您要查找的macOS平台名称是“达尔文”。

weylhg0b

weylhg0b2#

在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.
...

让脚本同时工作的一种方法是检查错误:

MYCOMMAND=$(base64 -w0 commands.sh)
if [ $? -ne 0 ]; then
  MYCOMMAND=$(base64 commands.sh)
fi

您也可以运行显式测试,例如

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
yyyllmsg

yyyllmsg3#

一个在Linux和MacOS中都有效的解决方案是使用tr

MYCOMMAND=$(base64 commands.sh | tr -d '\n')

相关问题