29

This is a rather hypothetical question, so please don't ask me why I'd want to do this.

Assuming that I have a variable GIF that contains binary data, and assuming that I cannot use the pipe | operator, the following should be the correct way to use 'triple-less-than' operator:

openssl enc -base64 <<< $GIF

However, it appears to me that <<< is not binary-safe and therefore the binary data gets corrupt.

Is there a binary-safe equivalent?

  • Please note that bash variables can't contains NUL chars. So your variable $GIF, for a start, is not holding full-binary even before starting. However, to the exception of the NUL character, it is holding all the others. (as a ref: vaab.blog.kal.fr/2014/05/03/… ) – vaab Apr 28 '16 at 4:05
33

The here string redirection (<<<) is a simple form of here document redirection (<<). Here string redirection is not "binary safe"; Bash will perform expansion on the here string. In addition, Bash will append a new-line to the end of the here string (issue the command xxd -p <<< "foo" and you'll get 666f6f0a in return).

Your only safe bet, excluding pipes, is I/O redirection.

Similar not binary safe question here. You can store encoded data and try this

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

however this is not far from

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

but without pipe metachar.

| improve this answer | |
4

Bash isn't binary safe in general, and will corrupt nulls and newlines in variables containing binary content during substitution.

So I think the answer is "no" but more fundamentally "not in a shell scripting language" because they all seem to have problems with binary.

I'd say however you plan to get the data into $GIF, you instead get it into a file, or use python as an alternative scripting language which will handle binary data without problems.

| improve this answer | |
  • 1
    References or precision, or simple examples would have been more helpful than a wild guess and general feeling from your side. There are ways to get binary data parsed through bash. – vaab Apr 28 '16 at 4:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.