Stupid Short: Bash's |, >, >>, <, 2>>, 2> Operators

Pierson Brannan on September 14, 2019

This is meant to be a stupid-short introductory and reference guide for quickly understanding these Bash operators: &gt;, 1&gt;, &gt;&gt;, 1&gt;&gt... [Read Full]
markdown guide
 

Here's one more I'm using sometimes:

$ call-foo > out_and_err.txt 2>&1

So here I'm redirecting STDERR to the address of STDOUT, which is a file called "out_and_err.txt".

 

I think that in recent bash and zsh, one can use

call-foo &> out_and_err.txt
 

This is my favourite "shut up, I don't want to see any output, even if it fails, just do, or don't do, the thing" shortcut:

call-foo &> /dev/null
 

I would've done call-foo > out-and-error.txt 2> out-and-error.txt; I've never heard of 2>&1 or &>. Very cool! Thanks for that!

What would be a practical application of print stdout and stderr to the same file?

@fennecdjay
@thorstenhirsch
@sinewalker

Openssl prints diagnostic info to stderr and certificate info to stdout. If you want them both in the same filter stream, &> is very handy. Or if you want them all in the same single log file

 
 

Another one people don't seem to use much is >| which will overwrite a file even if noclobber is on.

 

Makes truncating a breeze! |> logfile.log

 

Another really useful redirection-related BASHism: <( ):

Useful if, say, you want to check to see if a local file and an S3-hosted file are the same:

$ sha256sum <( aws s3 cp s3://BUKKIT1/file - ) ./file
d20c7a50c3ac734230b08dbe2cb9122634c2dd040eee56ebd8101bef455dbb88 */dev/fd/63
c204dbfa154fc4801bdaac298584815bbd1b4a968a2349dd17f1e7c459904d41 *file

Similarly, can be used for things like diffing two streams:

diff <( aws s3 cp s3://BUKKIT1/file - ) <( aws s3 cp s3://BUKKIT2/file - )
 

I never looked these up before, though I use most of them almost everyday 😁

Thanks Pierson!

 
code of conduct - report abuse