Skip to main content

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.