1

У меня есть небольшая команда, которую я использую для копирования / вставки файлов, которая включает в себя вставку tar-архива в кодировке base64 в 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 без дополнительного разрыва строки? Я имею в виду это все еще технически работаю, но я не хочу , ошибок , указанных при наличии не фактическая ошибка, и я не хочу , чтобы подавить поток ошибок в случае , если существует реальная ошибка.

1 ответ1

0

Я думаю, вы должны найти другую утилиту base64 , такую как версия GNU, которая допускает символы новой строки.

В противном случае, если предположить, что ввод имеет длину ровно одну строку (поскольку в противном случае в нем будет недопустимый символ новой строки), вы можете сделать следующее:

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

или если вам не нравится echo -n (хотя он работает в вашей системе, это не гарантируется):

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

Существует некоторая двусмысленность относительно того, являются ли переводы строк законными в кодировке base64; соответствующий RFC говорит, что они являются законными, только если приложение, использующее кодировку base64, задокументировано как разрешающее их. Это не очень помогает для кодека общего назначения base64.

Но AFAIK, практически все приложения, которые используют base64, явно разрешают переводы строки (а некоторые требуют их, устанавливая максимальную длину строки), поэтому мне кажется странным, что утилита base64 не имеет какого-либо механизма, позволяющего им это делать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .