J'essaie de comprendre pourquoi chaque fois que j'utilise function 2>&1 | tee -a $LOG
tee crée un sous-shell dans la fonction qui ne peut pas être quitté par simple exit 1
(et si je n'utilise pas tee
cela fonctionne très bien). Ci-dessous l'exemple:Dans bash, comment quitter un script à partir d'une fonction acheminée par tee?
#!/bin/bash
LOG=/root/log.log
function first()
{
echo "Function 1 - I WANT to see this."
exit 1
}
function second()
{
echo "Function 2 - I DON'T WANT to see this."
exit 1
}
first 2>&1 | tee -a $LOG
second 2>&1 | tee -a $LOG
Sortie:
[[email protected] ~]# ./1.sh
Function 1 - I WANT to see this.
Function 2 - I DON'T WANT to see this.
So. si j'enlève la partie | tee -a $LOG
, ça va fonctionner comme prévu (le script sera quitté dans la première fonction).
Pouvez-vous, s'il vous plaît, expliquer comment surmonter cela et quitter correctement la fonction tout en étant en mesure de té sortie?
"crée un sous-shell en fonction" Eh bien, vous l'avez déjà dit. Pourquoi? Parce que toutes les commandes simples dans un pipeline sauf le dernier sont exécutées dans des sous-cases (le dernier dépend d'une option ou quelque chose - j'ai oublié). Pourquoi? Car. Pour savoir comment quitter correctement, vérifiez l'état de sortie (si 'pipefail' est défini) ou' PIPESTATUS' après le pipeline. – 4ae1e1
Suivi sur commentaire ci-dessus: l'option que j'ai oublié est 'lastpipe'. – 4ae1e1
Connexe: http://stackoverflow.com/q/9277827/951890 –