Есть ли в bash бинарно-безопасный оператор «втрое меньше» <<<?

27

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

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

openssl enc -base64 <<< $GIF

Тем не менее, мне кажется, что <<<это не безопасно для двоичных файлов и, следовательно, двоичные данные становятся поврежденными.

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

Михаил
источник
Обратите внимание, что переменные bash не могут содержать символы NUL. Таким образом, ваша переменная $GIF, для начала, не содержит полный двоичный код даже до запуска. Однако, за исключением символа NUL, он содержит все остальные. (в качестве ссылки: vaab.blog.kal.fr/2014/05/03/… )
vaab

Ответы:

31

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

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

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

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

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

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

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

Дэн Круз
источник
1
Или попробуйте, od -a <<< ""и вы увидите nlвместо шестнадцатеричного значения.
jcalfee314
@ Уэсли Есть также archive.org. :) Оригинальная ссылка: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/…
Джейсон C,
4

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

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

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

Павел
источник
1
Ссылки или точность, или простые примеры были бы более полезными, чем дикое предположение и общее чувство с вашей стороны. Существуют способы анализа двоичных данных с помощью bash.
vaab