Réponses:
Vous pouvez rappeler execpour restaurer les descripteurs d'origine. Vous devrez les avoir enregistrés quelque part.
exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"
Dans la partie enregistrée, vous pouvez utiliser les descripteurs d'origine pour une commande en redirigeant vers les descripteurs supplémentaires.
echo "30 seconds remaining" >&3
Vous pouvez également placer la partie consignée de votre script dans une commande composée et rediriger cette commande composée. Cela ne fonctionne pas si vous souhaitez utiliser les descripteurs d'origine dans un piège quelque part dans cette partie redirigée.
{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
Utilisez additinal fd 3 et 4 pour stdout et stderr et redirigez simplement 1 et 2 vers eux à la fin de votre script:
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
exec 3>/dev/stdout 4>/dev/stderr -bash: /dev/stdout: Permission denied
Vous devez d'abord vérifier si vous avez ou non un tty.
if tty -s; then
echo "Hello, World" > $(tty)
fi
ttyutilitaire externe . Vous pouvez rediriger vers l'appareil spécial /dev/tty.
>&3fait ma solution préférée. Merci encore)!