Il y a certains caractères spéciaux en ligne de commande Linux qui ne sont pas explicites au premier abord. Il est important de les comprendre car ceux-ci sont des éléments clés de la manipulation des entrées et sorties des commandes. Dans cet article, je vais passer en revue les caractères spéciaux les plus rencontrés.
Dans un shell Unix, la sortie d'une commande est généralement envoyée vers la sortie standard (stdout) et les messages d'erreur vers la sortie d'erreur standard (stderr). Plusieurs caractères spéciaux permettent de jouer sur la sortie d'une commande.
Caractère | Description | Exemple |
---|---|---|
| | Redirige la sortie d'une commande vers une autre commande, en tant qu'entrée de type chaîne de caractères. | # Applique la commande grep sur la sortie générée par ls ls | grep "fichier.txt" |
> | Redirige la sortie vers un fichier. Crée le fichier s'il n'existe pas et le remplace s'il existe déjà. | # Crée le fichier fichier.txt, contenant la liste des fichiers renvoyés par ls ls > fichier.txt |
>> | Redirige la sortie vers un fichier. Crée le fichier s'il n'existe pas, le complète s'il existe déjà. | # Crée le fichier fichier.txt puis le complète à partir des informations sur l'espace disque (df) ls > fichier.txt ; df >> fichier.txt |
>| | Force la redirection de la sortie standard vers un fichier, même si le fichier est en lecture seule | # Ecrit le fichier "fichier.txt" même s'il existe déjà en lecture seule echo "Hello" >| "fichier.txt" |
>! | Redirige la sortie standard vers un fichier existant, même si le fichier est en lecture seule. Cette fonction permet d'éviter les avertissements de sécurité de lecture seule, par rapport à la fonction ">|" | # Crée/remplace "fichier.txt" par le contenu du répertoire même si le fichier est en lecture seule. Le fichier doit cependant déjà exister. ls >! "fichier.txt" |
2> | Redirige les erreurs standards (stderr) d'une commande vers un fichier, et le remplace s'il existe déjà. Pour ne pas afficher le message d'erreur système, on peut le diriger vers le flux null (/dev/null), qui est une sorte de poubelle pour les données. | # Affiche le contenu d'un fichier. Comme celui n'existe pas, écrit l'erreur générée par la commande dans le fichier erreur.txt cat "inexistant.txt" 2>"erreur.txt" # Si fichier.txt existe, son contenu est envoyé sur fichier2.txt, sinon l'erreur est envoyé dans erreur.txt cat "fichier.txt" > "fichier2.txt" 2>"erreur.txt" # Si le répertoire n'existe pas, n'affiche pas l'erreur système ls /inexistant 2>/dev/null |
2>> | Redirige les erreurs standards (stderr) d'une commande vers un fichier, et le complète s'il existe déjà. | # En lançant la commande 2 fois, l'erreur est enregistrée 2 fois dans le fichier erreur.txt cat "inexistant.txt" 2>>"erreur.txt" |
&> ou >& | Redirige la sortie standard (stdout) et les erreurs standards (stderr) vers un fichier, et le remplace s'il existe déjà. | # Si fichier.txt existe, fichier2.txt contiendra le même texte. Sinon, il contiendra l'erreur générée par la commande "cat" cat "fichier.txt" &> "fichier2.txt" |
&>> | Redirige la sortie standard (stdout) et les erreurs standards (stderr) vers un fichier, et le complète s'il existe déjà. | # Crée le fichier "fichier.txt" avec le contenu du répertoire, puis le complète avec à nouveau le même contenu du répertoire ls > "fichier.txt" ; ls &>> "fichier.txt" |
>( commande ) | Redirige l'entrée standard d'une commande à partir du résultat d'une autre commande en tant que fichier temporaire. Cette commande peut fonctionner à partir d'une liste de fichiers. A noter que cette syntaxe est nommée "opérateur de substitution de processus" et peut être utilise sur des sorties volumineuses, afin d'utiliser un fichier temporaire. | # Redirige l'entrée la sortie de la commande "ls" vers l'entrée de la commande "grep", en utilisant un fichier temporaire ls > >(grep "fichier.txt") |
<( commande ) | Redirige la sortie standard d'une commande vers l'entrée d'une autre commande en tant que fichier temporaire. | # Les sorties "a b" et "a c" sont envoyées à la commande "diff" diff <(echo -e "a\nb") <(echo -e "a\nc") |
2>&1 | Redirige la sortie d'erreur vers la sortie standard. | # La commande grep reçoit le contenu renvoyé par "ls", que ce soit le fichier ou l'erreur "No such file or directory" ls "inexistant.txt" 2>&1 | grep "No such file" |
|& | Redirige vers la commande suivante à la fois les erreurs standards et la sortie standard. La principale différence avec la commande précédente est que celle-ci crée un processus sous-jacent pour gérer la redirection des deux sorties (dans certains cas, cela peut entraîner des problèmes de performance ou de compatibilité). | # La commande grep reçoit le contenu renvoyé par "cat", que ce soit le fichier ou l'erreur "No such file or directory" cat "inexistant.txt" |& grep "No such file" |
L'entrée des commandes peut être manipulée au moyen de quelques caractères spéciaux.
Caractère | Description | Exemple |
---|---|---|
< | Redirige l'entrée d'une commande à partir d'un fichier. | # Affiche sur la sortie le contenu trié du fichier sort < "fichier.txt" # Un équivalent cat "fichier.txt" | sort |
<<< | Redirige l'entrée d'une commande à partir d'une chaîne de caractères. | # Recherche "b" dans la chaîne "a b c" grep "b" <<< "a b c" |
<< | Redirige l'entrée d'une commande à partir d'une chaîne de caractères multilignes et délimitée. | # Affiche "Hello, world!" avec un retour chariot entre les deux mots cat << DEBUT Hello, world! DEBUT |
D'autres caractères spéciaux ont des fonctionnalités sans aucun rapport avec l'entrée-sortie, comme des conditions d'enchaînement par exemple.
Caractère | Description | Exemple |
---|---|---|
& | Lance un processus en arrière-plan (sans bloquer le terminal). | # Attend 60 secondes en fond de tâche, sans bloquer le terminal sleep 60 & |
; | Exécute une autre commande après la fin de la première, qu'elle ait réussi ou non | # Se place dans le répertoire /opt puis liste les fichiers cd /opt ; ls |
&& | Exécute plusieurs commandes consécutivement, seulement si la précédente s'est bien déroulée. | # Se place dans le répertoire /opt et liste les fichiers seulement s'il existe cd /opt && ls |
|| | Exécute plusieurs commandes consécutivement, seulement si la précédente s'est mal déroulée. | # Se place dans le répertoire /inexistant et liste les fichiers seulement si la commande a échoué (un message d'erreur est affiché par la commande en erreur) cd /inexistant || echo "Erreur !" # Exécute la même commande mais redirige l'erreur standard vers /dev/null cd /inexistant 2>/dev/null || echo "Erreur !" |
!! | Réexécute la dernière commande exécutée. | # Exécute 2 fois l'affichage du répertoire courant ls ; !! |
RSS | Informations |