Czy w bashu jest bezpieczny binarnie operator „trzy razy mniej niż” <<<?


27

To raczej hipotetyczne pytanie, więc proszę nie pytaj mnie, dlaczego chciałbym to zrobić.

Zakładając, że mam zmienną GIFzawierającą dane binarne i zakładając, że nie mogę użyć |operatora potoku , następujący sposób powinien być prawidłowym sposobem użycia operatora „trzy razy mniej niż”:

openssl enc -base64 <<< $GIF

Wydaje mi się jednak, że <<<nie jest binarnie bezpieczny i dlatego dane binarne ulegają uszkodzeniu.

Czy istnieje odpowiednik binarnie bezpieczny?


Pamiętaj, że zmienne bash nie mogą zawierać znaków NUL. Więc twoja zmienna $GIF, na początek, nie przechowuje pełnego binarnego nawet przed uruchomieniem. Jednak z wyjątkiem znaku NUL, zawiera on wszystkie pozostałe. (jako odnośnik: vaab.blog.kal.fr/2014/05/03/... )
vaab

Odpowiedzi:


31

Tu łańcuch przekierowania ( <<<) jest prostą formą tutaj dokumentu przekierowania ( <<). Przekierowanie ciągu nie jest tutaj „bezpieczne binarnie”; Bash wykona rozwinięcie łańcucha tutaj. Ponadto Bash doda nową linię na końcu tutaj ciągu (wydaj polecenie, xxd -p <<< "foo"a otrzymasz 666f6f0aw zamian).

Jedynym bezpiecznym zakładem, z wyjątkiem potoków, jest przekierowanie we / wy .

Podobne, nie binarne, bezpieczne pytanie tutaj . Możesz przechowywać zakodowane dane i spróbuj tego

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

jednak nie jest to dalekie

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

ale bez rurkowego metacharu.


1
Lub spróbuj, od -a <<< ""a zobaczysz nlzamiast wartości szesnastkowej.
jcalfee314

@Wesley Istnieje również archive.org. :) Oryginalny link: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/…
Jason C

4

Bash nie jest ogólnie bezpieczny pod względem binarnym i spowoduje uszkodzenie zer i znaków nowej linii w zmiennych zawierających zawartość binarną podczas podstawiania.

Myślę więc, że odpowiedź brzmi „nie”, ale bardziej zasadniczo „nie w języku skryptowym powłoki”, ponieważ wszyscy wydają się mieć problemy z binarnym.

Powiedziałbym jednak, że planujesz przenieść dane do $ GIF, zamiast tego umieścisz je w pliku lub użyjesz Pythona jako alternatywnego języka skryptowego, który bez problemu poradzi sobie z danymi binarnymi.


1
Referencje, precyzja lub proste przykłady byłyby bardziej pomocne niż dzikie domysły i ogólne odczucia z twojej strony. Istnieją sposoby na przeanalizowanie danych binarnych za pomocą bash.
vaab
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.