bash, being a shell, has 2 streams you can redirect that output data: stdout and stderr, because this output needs to be redirected somewhere, linux has a specific 'discard everything' node reachable through /dev/null. Everything you send there will just disappear into the void.
(shells also have an input stream but I'll ignore this here since you asked for suppressing output)
These streams are represented by numbers: 1 for stdout and 2 for stderr.
So if you want to redirect just stdout you'd do that with the <
and >
operators (basically where it points to is where the data flows to)
suppose we want to suppress stdout (redirect to /dev/null):
psql db -f sql.sql > /dev/null
As you can see this is stdout is default, no stream number has been used
if you wanted to use the stream number you'd write
psql db -f sql.sql 1> /dev/null
Now if you want to suppress stderror (stream number 2), you'd use
psql db -f sql.sql 2> /dev/null
You could also redirect one stream to another, for example stderror to stdout, which is useful if you want to save all output somewhere, regular and errors.
psql db -f sql.sql 2>&1 > log.txt
mind you there can not be spaces between 2>&1
Finally and sometimes most interesting is the fact that you can suppress all output by using &>
, for when you want it 'perfectly quiet'
psql db -f sql.sql &> /dev/null
PAGER="/dev/null" psql db -P pager=always -f sql.sql
to make it always kill output. – Timer