输入 EOF 而不换行

输入 EOF 而不换行

我有一个小命令,用于复制/粘贴文件,包括将 base64 编码的 tar 存档粘贴到 stdin 中,但是 base64 实用程序一直给我关于我的输入的错误消息,因为我必须在发出 EOF 之前输入换行符来停止输入。

例如:

[root@box ~]echo hello | base64
aGVsbG8K
[root@box ~]base64 -d
aGVsbG8K[enter][ctrl+d]
hello
base64: invalid input

与笨重的相反:

[root@box ~]echo -n 'aGVsbG8K' | base64 -d
hello

但在我编写的命令上下文中,它实际上不能很好地工作。

那么有什么办法可以放入 EOF没有那个额外的换行符?我的意思是这在技术上仍然作品,但我不希望在没有实际错误的情况下显示错误,也不想在出现错误的情况下抑制 stderr一个实际的错误。

答案1

我认为您应该找到一个不同的base64实用程序,例如 GNU 版本,它可以容忍换行符。

如果不这样做,假设输入恰好只有一行长(否则它将包含非法的换行符),您可以执行以下操作:

echo -n "$(head -n1)" | base64 -d

或者如果你不喜欢echo -n(虽然它似乎在你的系统上运行,但不能保证):

printf %s "$(head -n1)" | base64 -d

关于换行符在 base64 编码中是否合法,存在一些歧义;相关 RFC 表示,只有使用 base64 编码的应用程序被记录为允许换行符时,换行符才是合法的。这对于通用 base64 编解码器没有多大帮助。

但据我所知,几乎所有使用 base64 的应用程序都明确允许换行符(有些应用程序通过设置最大行长来要求换行符),因此我认为该base64实用程序没有某种机制来允许它们,这很奇怪。

相关内容