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?

Michaił
źródło
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.

Dan Cruz
źródło
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.

Paweł
źródło
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