Dans un script bash, comment puis-je rediriger toutes les sorties standard vers un fichier journal et tee
la sortie à l'écran en utilisant exec
?
log_file="$HOME/logs/install.txt-`date +'%Y-%m-%d_%H-%M-%S'`"
[ -f "$log_file" ] || touch "$log_file"
exec 1>> $log_file 2>&1
Ce code redirige tout le journal vers le fichier journal mais pas vers l'écran.
Utilisez substitution de processus avec redirection &
et exec
:
exec &> >(tee -a "$log_file")
echo "This will be logged to the file and to the screen"
$log_file
Contiendra la sortie du script et tous les sous-processus, et la sortie sera également imprimée à l'écran.
>(...)
démarre le processus ...
et renvoie un fichier représentant son entrée standard.
exec &> ...
Redirige à la fois la sortie standard et l'erreur standard vers ...
Pour le reste du script (utilisez uniquement exec > ...
Pour la sortie standard uniquement).
tee -a
Ajoute son entrée standard au fichier et l'imprime également à l'écran.
exec >> $log_file 2>&1 && tail $log_file