3.3 - Redirections, tubes et tee

Les commandes utilisent trois flux standards :
Numéro
Flux
Rôle
0
entrée standard, 
stdin
données reçues par la commande
1
sortie standard, 
stdout
résultat normal
2
erreur standard, 
stderr
avertissements et erreurs
Rediriger la sortie
commande > resultat.txt       # remplacer le fichier
commande >> resultat.txt      # ajouter à la fin
commande 2> erreurs.txt       # erreurs seulement
commande > tout.txt 2>&1      # sortie et erreurs dans le même fichier
commande &> tout.txt          # raccourci Bash
> vide le fichier avant d'exécuter la commande. Vérifier le chemin et préférer 
>> lorsqu'un historique doit être conservé.
Ignorer une sortie :
commande > /dev/null
commande > /dev/null 2>&1
Fournir une entrée
sort < noms.txt
Document intégré :
cat <<'EOF'
Le contenu $VARIABLE reste littéral
Deuxième ligne
EOF
Relier des commandes avec un tube
Le tube 
| transmet la sortie standard d'une commande à l'entrée de la suivante.
ps aux | grep '[s]shd'
journalctl -b | grep -i 'error'
find . -type f | wc -l
Une chaîne se lit de gauche à droite : produire, filtrer, transformer puis résumer.
cut -d: -f1 /etc/passwd | sort | uniq
Voir et enregistrer avec tee
ip addr | tee diagnostic-reseau.txt
ip addr | tee -a diagnostic-complet.txt
Écrire dans un fichier protégé :
printf '%s\n' 'option=valeur' | sudo tee /etc/application.conf
tee affiche aussi ce qu'il écrit. Ajouter 
> /dev/null pour masquer cette copie d'écran.
Codes d'erreur dans un pipeline
Par défaut, le shell retourne souvent le code de la dernière commande du pipeline. Dans un script Bash sensible :
set -o pipefail
commande1 | commande2
echo "$?"
pipefail signale l'échec d'une commande intermédiaire. Dans un terminal, voir les codes de tout le dernier pipeline :
printf '%s\n' "${PIPESTATUS[@]}"
Ne mélangez pas au hasard 
sudo, les redirections et les tubes : chaque partie peut s'exécuter avec des privilèges différents.