Я думаю, вы должны найти другую base64
утилиту, такую как версия GNU, которая допускает символы новой строки.
В противном случае, если предположить, что ввод имеет длину ровно одну строку (поскольку в противном случае в нем будет недопустимый символ новой строки), вы можете сделать следующее:
echo -n "$(head -n1)" | base64 -d
или если вам не нравится echo -n
(хотя это работает в вашей системе, это не гарантируется):
printf %s "$(head -n1)" | base64 -d
Существует некоторая двусмысленность относительно того, являются ли переводы строк законными в кодировке base64; соответствующий RFC говорит, что они являются законными, только если приложение, использующее кодировку base64, задокументировано как разрешающее их. Это не очень помогает для кодека общего назначения base64.
Но AFAIK, практически все приложения, которые используют base64, явно разрешают переводы строки (а некоторые требуют их, устанавливая максимальную длину строки), поэтому мне кажется странным, что base64
утилита не имеет какого-либо механизма, позволяющего им это делать.