25

Это довольно гипотетический вопрос, поэтому, пожалуйста, не спрашивайте меня, почему я хочу это сделать.

Предполагая, что у меня есть переменная GIF которая содержит двоичные данные, и предполагая, что я не могу использовать канал | оператор, следующий должен быть правильный способ использовать оператор «втрое меньше»:

openssl enc -base64 <<< $GIF

Однако мне кажется, что <<< не является бинарно-безопасным, и, следовательно, двоичные данные повреждены.

Есть ли бинарно-безопасный эквивалент?

2 ответа2

29

Перенаправление строки здесь (<<<) - это простая форма перенаправления документа здесь (<<). Здесь перенаправление строк не является "бинарной безопасностью"; Bash выполнит расширение строки здесь. Кроме того, Bash добавит новую строку в конец строки here (введите команду xxd -p <<< "foo" и вы получите 666f6f0a взамен).

Ваша единственная безопасная ставка, за исключением каналов, это перенаправление ввода / вывода.

Подобный не бинарный безопасный вопрос здесь. Вы можете хранить закодированные данные и попробовать это

COMMAND_WITH_BIN_INPUT <(uudecode <(echo "$uuEncodedData")) 

Однако это не далеко от

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

но без трубы метачар.

4

Bash в целом не является бинарно-безопасным, и во время подстановки будет повреждать пустые и новые строки в переменных, содержащих двоичное содержимое.

Поэтому я думаю, что ответ "нет", но более фундаментально "не на языке сценариев оболочки", потому что у них, похоже, есть проблемы с двоичным кодом.

Однако я бы сказал, что вы планируете помещать данные в $ GIF, вместо этого вы помещаете их в файл или используете python в качестве альтернативного языка сценариев, который будет обрабатывать двоичные данные без проблем.

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