rediriger une ligne bash vers stdout / terminal vs log

1

J'ai un script bash où je redirige la sortie dans un fichier pour la journalisation.

if test -t 1; then
    # stdout is a terminal
    exec > $OUTPUT_FILE 2>&1
else
    # stdout is not a terminal, no logging.
    false     
fi 

J'ai un endroit plus tard où j'ai réellement besoin d'une sortie pour aller à stdout. Y a-t-il un moyen de passer outre un seul appel pour le forcer?

echo test 1>
Veilig
la source
1
Qu'en est-il de laisser tel tail -f $OUTPUT_FILEquel et ?
LatinSuD

Réponses:

3

Vous pouvez mettre cette ligne plus tôt dans votre script:

exec 3>&1

Ensuite, chaque fois que vous devez envoyer quelque chose à aller à stdout:

echo "this goes to stdout" 1>&3

Nettoyer:

exec 1>&3
echo "now goes to normal stdout"
exec 3>&-  #to remove fd3

Voici comment cela fonctionne: vous définissez un nouveau descripteur de fichier, 3, qui pointe vers le même endroit que stdout. Vous redirigez ensuite stdout si nécessaire, mais fd3 reste identique à ce qu’il était (qui est votre terminal). Lorsque vous avez terminé, supprimez simplement fd3!

Modifier:

Si vous voulez que la sortie soit à la fois dans votre fichier et dans "classic stdout", procédez comme suit:

echo "goes both places" | tee -a $OUTPUT_FILE 1>&3
bgStack15
la source