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.