Gibt es einen binärsicheren Operator "Triple less than" <<< in bash?

27

Dies ist eine eher hypothetische Frage. Bitte fragen Sie mich nicht, warum ich das tun möchte.

Angenommen, ich habe eine Variable GIF, die Binärdaten enthält, und ich kann den Pipe- |Operator nicht verwenden, dann sollte der Operator "Triple-Less-than" wie folgt verwendet werden:

openssl enc -base64 <<< $GIF

Es scheint mir jedoch, dass dies <<<nicht binärsicher ist und daher die Binärdaten beschädigt werden.

Gibt es eine binärsichere Entsprechung?

Mikhail
quelle
Bitte beachten Sie, dass bash-Variablen keine NUL-Zeichen enthalten können. Ihre Variable enthält $GIFalso zunächst einmal nicht die vollständige Binärdatei, noch bevor sie gestartet wird. Mit Ausnahme des NUL-Zeichens enthält es jedoch alle anderen. (als Hinweis : vaab.blog.kal.fr/2014/05/03/… )
vaab

Antworten:

31

Die here string redirection ( <<<) ist eine einfache Form der here document redirection ( <<). Hier ist die Zeichenfolgenumleitung nicht "binär sicher". Bash erweitert den Here-String. Außerdem fügt Bash eine neue Zeile an das Ende der Here-Zeichenfolge an (geben Sie den Befehl ein xxd -p <<< "foo"und Sie erhalten eine 666f6f0aAntwort).

Ihre einzige sichere Wette mit Ausnahme von Pipes ist die E / A-Umleitung .

Ähnliche nicht binärsichere Frage hier . Sie können verschlüsselte Daten speichern und dies versuchen

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

Dies ist jedoch nicht weit von

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

aber ohne rohr metachar.

Dan Cruz
quelle
1
Oder versuchen od -a <<< ""Sie , und Sie werden nlanstelle des Hex-Werts sehen.
jcalfee314
@Wesley Es gibt auch archive.org. :) Ursprünglicher Link: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/…
Jason C
4

Bash ist im Allgemeinen nicht binärsicher und beschädigt beim Ersetzen Nullen und Zeilenumbrüche in Variablen, die binären Inhalt enthalten.

Ich denke also, die Antwort ist "nein", aber im Grunde genommen "nicht in einer Shell-Skriptsprache", weil sie alle Probleme mit Binärdateien zu haben scheinen.

Ich würde jedoch sagen, dass Sie vorhaben, die Daten in $ GIF abzulegen, stattdessen sie in eine Datei abzulegen oder Python als alternative Skriptsprache zu verwenden, die problemlos mit Binärdaten umgehen kann.

Paul
quelle
1
Referenzen oder Präzisierungen oder einfache Beispiele wären hilfreicher gewesen als eine wilde Vermutung und ein allgemeines Gefühl von Ihrer Seite. Es gibt Möglichkeiten, Binärdaten durch Bash zu analysieren.
Vaab