GNU/Linux >> Tutoriels Linux >  >> Linux

Comment fonctionne le modèle <( cmd ) dans bash ?

C'est ce qu'on appelle la substitution de processus.

3.5.6 Substitution de processus

La substitution de processus permet de faire référence à l'entrée ou à la sortie d'un processus à l'aide d'un nom de fichier.

La liste de processus est exécutée de manière asynchrone et son entrée ou sa sortie apparaît sous la forme d'un nom de fichier. Ce nom de fichier est passé en argument à la commande en cours à la suite de l'expansion. Si la forme>(list) est utilisée, l'écriture dans le fichier fournira une entrée pour la liste. Si la forme <(list) est utilisée, le fichier passé en argument doit être lu pour obtenir la sortie de list. Notez qu'aucun espace ne peut apparaître entre le et la parenthèse gauche, sinon la construction serait interprétée comme une redirection. La substitution de processus est prise en charge sur les systèmes prenant en charge les tubes nommés (FIFO) ou la méthode /dev/fd de dénomination des fichiers ouverts.

Ce n'est pas seulement une chose bash telle qu'elle est apparue à l'origine dans ksh, mais ce n'est pas dans la norme posix.

Sous le capot, la substitution de processus a deux implémentations. Sur les systèmes prenant en charge /dev/fd (la plupart des systèmes de type Unix) cela fonctionne en appelant le pipe( ) appel système, qui renvoie un descripteur de fichier $fd pour un nouveau canal anonyme, puis en créant la chaîne /dev/fd/$fd , et le remplace sur la ligne de commande. Sur les systèmes sans /dev/fd support, il appelle mkfifo avec un nouveau nom de fichier temporaire pour créer un tube nommé, et remplace ce nom de fichier sur la ligne de commande.


Vous pouvez penser à <( somecommand ) comme nom de fichier d'un fichier temporaire contenant la sortie de somecommand . En d'autres termes,

utility < <( somecommand )

est un raccourci pour

somecommand >tempfile
utility <tempfile
rm -f tempfile

Et

utility <( somecommand )

est un raccourci pour

somecommand >tempfile
utility tempfile  # notice the lack of redirection here (utility expected to read from "tempfile")
rm -f tempfile

De même >( somecommand ) peut être considéré comme le nom de fichier d'un fichier temporaire qui sera introduit dans somecommand sur son entrée standard. En d'autres termes,

utility > >( somecommand )

est un raccourci pour

utility >tempfile
somecommand <tempfile
rm -f tempfile

Et

utility >( somecommand )

pourrait éventuellement être un raccourci pour

mkfifo temppipe
somecommand <temppipe &
utility temppipe  # utility is expected to write to "temppipe"
rm -f temppipe

(ou quelque chose de similaire)


Linux
  1. Qu'est-ce que NGINX ? Comment ça marche?

  2. Comment fonctionne Awk '!a[$0]++' ?

  3. Comment fonctionne le Sticky Bit ?

  4. Le but de .bashrc et comment ça marche ?

  5. Comment fonctionnent les composants internes de Sudo ?

Comment utiliser la commande de lecture Bash

Dans un script bash, comment la commande Continuer fonctionne-t-elle avec les boucles intégrées ?

Comment fonctionne la mémoire d'échange sous Linux ?

Comment fonctionne la commande 'ls' sous Linux/Unix ?

Comment fonctionne l'interface de bouclage

Comment fonctionne une interface graphique Linux au niveau le plus bas ?