GNU/Linux >> Tutoriels Linux >  >> Linux

Substitution de processus :une méthode peu courante mais avancée pour la redirection d'entrée/sortie sous Linux

Vous êtes probablement déjà familiarisé avec les entrées/sorties et la redirection de canal sous Linux.

Permettez-moi de vous parler d'une fonctionnalité similaire mais avancée appelée substitution de processus.

Vous trouverez deux types de syntaxe pour la substitution de processus :

<(commands)

ou

>(commands)

Laissez-moi entrer un peu dans les détails.

Substitution de processus bash

Vous constaterez que la substitution de processus peut être utilisée de la même manière que la redirection STDOUT ou STDIN.

Avec <(commands) opérateur, vous lisez à partir de la substitution. Cela signifie que les commands est configuré pour l'utiliser comme stdout .

Par exemple, la commande suivante utilise la sortie de ls *sh :

wc -l <(ls *sh)

Cela équivaut à :

ls *sh | wc -l

Avec >(commands) opérateur, vous écrivez à la substitution. Cela signifie que les commands est configuré pour l'utiliser comme stdin .

En d'autres termes, lorsque vous avez une commande qui sort dans un fichier mais que vous voulez qu'elle écrive dans une autre commande au lieu du fichier.

Voici un exemple qui devrait rendre les choses un peu plus claires :

tar -cf >(ssh remote_server tar xf -) .

Vous voyez ce que ça fait ? C'est exact. Vous venez de transférer tout le contenu du répertoire courant vers un serveur distant. Le fichier archive est créé à la volée et est extrait sur le serveur.

Pour être honnête, >(...) L'opérateur est moins courant. Vous constaterez que <(...) peut être utilisé plus souvent.

Alors, quel est l'avantage de la substitution de processus si elle fonctionne comme la redirection d'entrée-sortie normale ?

Vous vous rendrez compte de la puissance et de l'utilité de la substitution de processus bash lorsque vous avez plusieurs pipelines de commandes à combiner en une seule commande.

Avantage de la substitution de processus bash

L'utilisation la plus évidente et la plus fréquente de la substitution de processus est la comparaison des résultats de deux programmes. Laissez-moi vous le montrer avec un exemple pratique.

Supposons que vous ayez des fichiers de programme C et leurs fichiers objet correspondants (fichier .out) avec le même nom dans un répertoire.

ls *
aa.c aa.out bb.c bb.out cc.c cc.out ...

Voici votre objectif. Vous voulez vérifier si chaque fichier C a son fichier de sortie correspondant avec le même nom que le fichier C ou non.

Votre approche typique serait de lister les fichiers filtrés sur l'extension, puis d'utiliser la commande cut avec délimiteur .(point) pour extraire le nom du fichier sans extension :

ls *.c | cut -d. -f1
aa
bb
cc
dd

Votre approche typique consisterait à enregistrer la sortie des fichiers *.c et *.out dans des fichiers temporaires, puis à comparer ces fichiers avec la commande diff. Ai-je raison ?

ls *.c | cut -d. -f1 > c.txt
ls *.out | cut -d. -f1 > out.txt
diff c.txt out.txt
rm c.txt out.txt

Vous pouvez utiliser le répertoire /tmp pour créer des fichiers temporaires, mais vous avez toujours trois lignes de commandes.

Vous pouvez magnifiquement utiliser la substitution de processus pour remplacer tout ce qui précède par une seule commande sans créer de fichiers temporaires :

diff <(ls *.c | cut -d. -f1) <(ls *.out | cut -d. -f1)

Vous n'avez pas eu besoin de créer de fichiers temporaires ici et c'est la clé. Voici mon conseil pour savoir quand utiliser la substitution de processus.

Chaque fois que vous pensez avoir besoin d'un fichier temporaire pour faire quelque chose, demandez-vous si la substitution de processus peut être utilisée.

La substitution de processus est une fonctionnalité bash et peut ou non fonctionner avec un autre shell.

J'espère que vous essaierez d'utiliser la substitution de processus à l'avenir. Comme vous pouvez le voir, c'est très utile. Vos questions et suggestions sont les bienvenues.


Linux
  1. 5 astuces rsync avancées pour les administrateurs système Linux

  2. Redirection d'entrée/sortie sous Linux/Unix

  3. 30 exercices de processus Linux pour les administrateurs système

  4. Linux - Limiter l'utilisation de la mémoire pour un seul processus Linux ?

  5. Sortie de quelle commande utilisée pour l'entrée sur CD ?

Explication de la commande Linux dd pour les débutants (8 exemples)

30 meilleurs exemples de commandes pour la surveillance sous Linux

Explication de la redirection d'entrée-sortie sur Linux

Linux - Comment annuler le partage du réseau pour le processus actuel ?

Explication :Redirection des entrées, des sorties et des erreurs sous Linux

Commandes pour la gestion des processus sous Linux