Чи є бінарний безпечний "потрійний менше" <<< оператор в баші?


27

Це досить гіпотетичне питання, тому, будь ласка, не запитуйте мене, чому я хотів би це зробити.

Якщо припустити, що у мене є змінна, GIFяка містить двійкові дані, і якщо припустити, що я не можу використовувати |оператор труби , слід використовувати правильний спосіб використання оператора "потрійний менший ніж":

openssl enc -base64 <<< $GIF

Однак мені здається, що <<<це не є безпечним для бінарних даних, і тому двійкові дані пошкоджуються.

Чи існує бінарний безпечний еквівалент?


Зверніть увагу, що bash змінні не можуть містити символів NUL. Тож ваша змінна $GIF, для початку, не має повноцінного двійкового файлу навіть перед запуском. Однак, за винятком символу NUL, він тримає всі інші. (як ref: 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

@Wesley Є також archive.org. :) Оригінальне посилання: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/…
Jason C

4

Bash взагалі не є бінарним безпечним і пошкоджує нулі та нові рядки змінних, що містять бінарний вміст під час заміни.

Тому я думаю, що відповідь "ні", але більш принципово "не в мові сценаріїв оболонок", тому що всі вони, мабуть, мають проблеми з бінарними.

Я б сказав, однак, ви плануєте отримати дані в $ GIF, замість цього ви отримаєте їх у файл або використовуєте python як альтернативну мову сценаріїв, яка без проблем обробляє бінарні дані.


1
Посилання або точність, чи прості приклади були б кориснішими, ніж дикі здогадки та загальні почуття з вашого боку. Є способи проаналізувати бінарні дані через bash.
vaab
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.