Pour un shell interactif l'entrée standard (stdin), la sortie standard (stdout) et la sortie erreur standard (stderr) sont toutes les trois associées au terminal de l'utilisateur.
Cela peut être visualisé en listant le contenu de /proc/$$/fd
# Afficher les descripteurs ouverts pour le shell courant ls -l /proc/$$/fd total 0 lrwx------ 1 yoann yoann 64 janv. 18 18:08 0 -> /dev/pts/3 lrwx------ 1 yoann yoann 64 janv. 18 18:08 1 -> /dev/pts/3 lrwx------ 1 yoann yoann 64 janv. 18 18:08 2 -> /dev/pts/3 lrwx------ 1 yoann yoann 64 janv. 18 18:08 255 -> /dev/pts/3
Pour plus de détails à propos des descripteurs de fichiers voir la note file descriptors.
# Redirige la sortie de echo dans le fichier # de descripteur 255 (->/dev/pts/3) echo "Bonjour $USER" >&255 Bonjour yoann
La redirection des entrées sorties consistera à modifier les fichiers associés à ces descripteurs.
Les exemples ci-dessous permettent de rediriger la sortie standard et la sortie d'erreur de la commande dans un fichier:
command > "/path/to/file" 2>&1 # Equivalent via l'opérateur '&>' qui permet # de rediriger à la fois stdout et stderr command &> "/path/to/file"
Pour modifier les descripteurs associés au shell courant, il est possible d'utiliser la primitive exec sans commande en argument. La documentation détaille le fonctionnement de la primitive qui sans commande spécifiée applique les redirections sur le shell courant.
# Appliquer les redirections d'E/S # sur le shell courant exec 2> "/path/to/file"