GNU/Linux >> Tutoriels Linux >  >> Linux

Masquer la sortie d'une commande shell uniquement en cas de succès ?

Solution 1 :

Il devrait être assez facile d'écrire un script à cette fin.

Quelque chose comme ce script complètement non testé.

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

D'un autre côté, pour les commandes que j'exécute dans le cadre d'un script, je veux généralement quelque chose de mieux que de simplement imprimer toute la sortie. Je limite souvent ce que je vois à l'inconnu. Voici un script que j'ai adapté de quelque chose que j'ai lu il y a plus de dix ans.

#!/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 $?

Solution 2 :

Je ne pense pas qu'il y ait une façon propre de faire cela, la seule chose à laquelle je peux penser est

  • Capturez le résultat de la commande.
  • Vérifiez la valeur de retour de la commande et si elle a échoué
    • affiche la sortie capturée.

La mise en œuvre de cela pourrait cependant être un projet intéressant, mais peut-être au-delà des questions et réponses.

Solution 3 :

Je configurerais une fonction bash comme celle-ci :

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; }

Ensuite, vous pouvez simplement exécuter la commande :

suppress foo -a bar

Solution 4 :

Essayez ceci :

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

Linux
  1. Comment affecter la sortie d'une commande à une variable Shell ?

  2. Stockage de la sortie de la commande dans la variable Shell ?

  3. Quelle est la différence entre obtenir la sortie de la commande en utilisant `command` et $ (commande) dans Shell ??

  4. Rediriger la sortie d'une commande dans 'time Command' ?

  5. Meilleur moyen d'annuler tous les travaux Slurm à partir de la sortie de la commande Shell ?

Comment rediriger la sortie de la commande shell

Rechercher du texte sur la sortie du terminal ?

Comment puis-je boucler sur la sortie d'une commande shell ?

Obtenir la première ligne de la sortie d'une commande shell

Comment exécuter la commande Vim depuis le shell ?

Pourquoi slabtop -o ne renvoie-t-il que les 23 premières lignes lorsque la commande est canalisée ?