Restaurer stdout et stderr à leur valeur par défaut

Dans le script shell, nous pouvons modifier l’entrée par défaut dans un fichier en utilisant la commande exec comme suit:

exec 1>outputfile 

Toutefois, si dans le même script si je veux restaurer le descripteur stdout «1» à la valeur par défaut (terminal). Comment pouvons-nous y arriver?

Cet exemple

 Example 20-2. Redirecting stdout using exec #!/bin/bash # reassign-stdout.sh LOGFILE=logfile.txt exec 6>&1 # Link file descriptor #6 with stdout. # Saves stdout. exec > $LOGFILE # stdout replaced with file "logfile.txt". # ----------------------------------------------------------- # # All output from commands in this block sent to file $LOGFILE. echo -n "Logfile: " date echo "-------------------------------------" echo echo "Output of \"ls -al\" command" echo ls -al echo; echo echo "Output of \"df\" command" echo df # ----------------------------------------------------------- # exec 1>&6 6>&- # Restore stdout and close file descriptor #6. echo echo "== stdout now restored to default == " echo ls -al echo exit 0 

Apparaît pour montrer ce que vous voulez. Il est venu d’ ici , où il y a un peu de discussion et d’autres informations pertinentes.

Essayez la commande “tee”:

 exec | tee outputfile 

Regardez la page de manuel du tee pour plus d’explications:

tee – lecture depuis l’entrée standard et écriture sur la sortie standard et les fichiers