bash, essendo una shell , ha 2 stream che puoi reindirizzare a quei dati di output: stdout e stderr, poiché questo output deve essere reindirizzato da qualche parte, Linux ha uno specifico nodo 'scarta tutto' raggiungibile attraverso / dev / null . Tutto ciò che invii lì scomparirà nel vuoto.
(le shell hanno anche un flusso di input ma lo ignorerò qui poiché hai chiesto di sopprimere l'output)
Questi flussi sono rappresentati da numeri: 1 per stdout e 2 per stderr.
Quindi, se vuoi reindirizzare solo stdout, lo faresti con gli operatori <
e >
(sostanzialmente dove punta a dove i dati scorrono)
supponiamo di voler sopprimere stdout (reindirizzare a / dev / null):
psql db -f sql.sql > /dev/null
Come puoi vedere, questo è stdout è predefinito, nessun numero di flusso è stato usato se volevi usare il numero di flusso che scrivevi
psql db -f sql.sql 1> /dev/null
Ora se vuoi sopprimere stderror (stream numero 2), lo useresti
psql db -f sql.sql 2> /dev/null
Puoi anche reindirizzare uno stream a un altro, ad esempio stderror su stdout, che è utile se vuoi salvare tutto l'output da qualche parte, regolare ed errori.
psql db -f sql.sql 2>&1 > log.txt
badate che non possono esserci spazi tra 2>&1
Infine e talvolta il più interessante è il fatto che è possibile sopprimere tutti gli output utilizzando &>
, perché quando lo si desidera è "perfettamente silenzioso"
psql db -f sql.sql &> /dev/null
PAGER="/dev/null" psql db -P pager=always -f sql.sql
farlo uccidere sempre l'output.