Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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?

share|improve this question
add comment

2 Answers

up vote 7 down vote accepted

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.

share|improve this answer
1  
First link no longer exists. Hence the importance of including as much information in the answer as possible, even if it appears too verbose at first, because the information linked to does not stay around forever. –  Wesley Apr 28 at 22:44
    
Alternative link for "here strings": linux.die.net/abs-guide/x15683.html –  JJC May 15 at 17:56
    
Or, try od -a <<< "" and you'll see nl instead of the hex value. –  jcalfee314 Jun 17 at 14:46
    
@Wesley There's also archive.org. :) Original link: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/… –  Jason C Jun 17 at 15:05
add comment

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.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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