Y a-t-il un opérateur binaire «triple inférieur à» <<< dans bash?

27

C'est une question plutôt hypothétique, alors ne me demandez pas pourquoi je voudrais faire ça.

En supposant que j'ai une variable GIFqui contient des données binaires et en supposant que je ne peux pas utiliser l' |opérateur de tuyau , ce qui suit devrait être la bonne façon d'utiliser l'opérateur "triple moins que":

openssl enc -base64 <<< $GIF

Cependant, il me semble que ce <<<n'est pas sûr pour les binaires et donc les données binaires sont corrompues.

Existe-t-il un équivalent binaire sûr?

Mikhail
la source
Veuillez noter que les variables bash ne peuvent pas contenir de caractères NUL. Donc, votre variable $GIF, pour commencer, ne tient pas complètement binaire avant même de commencer. Cependant, à l'exception du caractère NUL, il détient tous les autres. (comme ref: vaab.blog.kal.fr/2014/05/03/… )
vaab

Réponses:

31

La redirection de chaîne ici ( <<<) est une forme simple de redirection de document ici ( <<). Ici, la redirection de chaîne n'est pas «sûre pour les binaires»; Bash effectuera une expansion sur la chaîne here. De plus, Bash ajoutera une nouvelle ligne à la fin de la chaîne ici ( xxd -p <<< "foo"lancez la commande et vous obtiendrez 666f6f0aen retour).

Votre seule valeur sûre, à l' exclusion des tuyaux, est la redirection d' E / S .

Question de sécurité non binaire similaire ici . Vous pouvez stocker des données encodées et essayer ceci

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

mais ce n'est pas loin de

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

mais sans pipe metachar.

Dan Cruz
la source
1
Ou essayez od -a <<< ""et vous verrez à la nlplace de la valeur hexadécimale.
jcalfee314
@Wesley Il y a aussi archive.org. :) Lien d'origine: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/…
Jason C
4

Bash n'est pas binaire sûr en général, et corrompra les valeurs nulles et les sauts de ligne dans les variables contenant du contenu binaire pendant la substitution.

Je pense donc que la réponse est "non" mais plus fondamentalement "pas dans un langage de script shell" car ils semblent tous avoir des problèmes avec le binaire.

Je dirais cependant que vous envisagez d'entrer les données dans $ GIF, vous les placez plutôt dans un fichier, ou utilisez python comme un autre langage de script qui gérera les données binaires sans problème.

Paul
la source
1
Des références ou de la précision, ou de simples exemples auraient été plus utiles qu'une supposition sauvage et un sentiment général de votre côté. Il existe des moyens pour analyser les données binaires via bash.
vaab