GNU/Linux >> Linux Esercitazione >  >> Linux

Nascondere l'output di un comando shell solo in caso di successo?

Soluzione 1:

Dovrebbe essere abbastanza facile scrivere uno script per questo scopo.

Qualcosa come questo script completamente non testato.

OUTPUT=`tempfile`
program_we_want_to_capture &2>1 > $OUTPUT
[ $? -ne 0 ]; then
    cat $OUTPUT
    exit 1
fi
rm $OUTPUT

D'altra parte per i comandi che eseguo come parte di uno script di solito voglio qualcosa di meglio che stampare semplicemente tutto l'output. Spesso limito ciò che vedo all'ignoto. Ecco una sceneggiatura che ho adattato da qualcosa che ho letto più di dieci anni fa.

#!/bin/bash

the_command 2>&1 | awk '
BEGIN \
{
  # Initialize our error-detection flag.
  ErrorDetected = 0
}
# Following are regex that will simply skip all lines
# which are good and we never want to see
/ Added UserList source/ || \
/ Added User/ || \
/ init domainlist / || \
/ init iplist / || \
/ init urllist / || \
/ loading dbfile / || \
/^$/ {next} # Uninteresting message.  Skip it.

# Following are lines that we good and we always want to see
/ INFO: ready for requests / \
{
  print "  " $0 # Expected message we want to see.
  next
}

# any remaining lines are unexpected, and probably error messages.  These will be printed out and highlighted.
{
  print "->" $0 # Unexpected message.  Print it
  ErrorDetected=1
}

END \
{
  if (ErrorDetected == 1) {
    print "Unexpected messages (\"->\") detected in execution."
    exit 2
  }
}
'
exit $?

Soluzione 2:

Non penso che ci sia un modo pulito per farlo, l'unica cosa che mi viene in mente è

  • Cattura l'output del comando.
  • Controlla il valore di ritorno del comando e se fallisce
    • visualizza l'output acquisito.

L'implementazione di questo potrebbe essere un progetto interessante, ma forse al di là di domande e risposte.

Soluzione 3:

Imposterei una funzione bash come questa:

function suppress { /bin/rm --force /tmp/suppress.out 2> /dev/null; ${1+"[email protected]"} > /tmp/suppress.out 2>&1 || cat /tmp/suppress.out; /bin/rm /tmp/suppress.out; }

Quindi, potresti semplicemente eseguire il comando:

suppress foo -a bar

Soluzione 4:

Prova così:

out=`command args...` || echo $out

Linux
  1. Il punto del comando esterno `cd`?

  2. Memorizzazione dell'output del comando nella variabile Shell?

  3. Reindirizzare l'output di un comando in `time Command`?

  4. Come posso eseguire il loop sull'output di un comando di shell?

  5. Ottieni la prima riga dell'output di un comando di shell

Come reindirizzare l'output del comando della shell

Cerca testo sull'output del terminale?

Nascondi i file nascosti di Linux in Windows

Come aggiungere l'output a un file?

Come eseguire il comando Vim dalla shell?

Come posso nascondere l'output di un'applicazione shell in Linux?