GNU/Linux >> Tutoriels Linux >  >> Linux

Entrée standard multiple ? Comment?

Ce n'est pas une entrée standard multiple. C'est un bashisme qui s'appelle 'Process Substitution' http://tldp.org/LDP/abs/html/process-sub.html

Il crée un pseudo fichier (/dev/fd/something ) pour chaque remplacement. C'est plutôt utile. La commande ne peut être lue que comme un flux, ce qui signifie qu'elle ne peut pas aller et venir avec fseek. Il doit le lire comme un flux d'octets, comme un tube.

Réponse BONUS

Vous n'avez pas besoin d'en faire trop pour l'utiliser. En ce qui concerne votre script, il obtient un nom de fichier valide sur la ligne de commande, qui peut être ouvert () comme n'importe quoi d'autre. Comme d'autres l'ont dit, vous verriez diff /dev/fd/XX /dev/fd/YY . Si vous faites un stat() sur l'un de ces pseudo-fichiers, vous verrez qu'il s'agit d'un tube nommé, et vous devriez le traiter avec la sémantique du tube - à savoir pas de fseek() ou ftell(). Si vous faites un test stat() pour voir explicitement s'il s'agit d'un fichier (par exemple [ -f $1 ] ) cela va break - ceci est implémenté comme un tube nommé après tout.


<(...) traite la substitution en bas. La sortie du processus entre parenthèses est envoyée à un descripteur de fichier supplémentaire au-delà du 3 normal, et un nom de fichier est renvoyé correspondant à ce descripteur de fichier. De cette manière, la sortie d'une commande peut être traitée comme un nom de fichier à transmettre à une autre commande.


Il y a un stdin et un stdout pour chaque processus . Ils sont généralement connectés au terminal, mais ils peuvent être redirigés séparément les uns des autres.

Dans l'exemple, il y a deux wget processus impliqués, chacun ayant son propre stdin et stdout . Chaque wget le processus écrit dans - , qui est son stdout . Puis bash substitution de processus <(...) relie le stdout du processus vers un pseudo-fichier unique, à partir duquel diff Peux lire. Notez que les deux substitutions de processus produisent deux pseudo-fichiers différents ! Ainsi, diff voit quelque chose comme :

diff /dev/fd/XX /dev/fd/YY

où le stdout de wget -q -O - URL1 est connecté au /dev/fd/XX , et le stdout de wget -q -O - URL2 à /dev/fd/YY .


Linux
  1. Comment envoyer Stdout à plusieurs commandes ?

  2. Comment obtenir l'ID de processus du processus d'arrière-plan ?

  3. Comment puis-je faire en sorte que sed lise à partir de l'entrée standard?

  4. Comment tuer le processus zombie

  5. Python - Superviseur comment enregistrer la sortie standard -

Comment tuer un processus zombie sous Linux

Comment taper emoji sur Linux

Comment tuer un processus sous Linux

Comment ajouter plusieurs hôtes dans phpMyAdmin

Comment tuer un processus sous Linux

Comment joindre plusieurs pages PDF à une seule page