Disons que j'ai un script appelé script
, qui lit stdin
et envoie des résultats à l'écran.
Si je voulais lui donner le contenu d'un fichier, j'aurais tapé:
$ ./script < file1.txt
Mais que se passe-t-il si je veux alimenter de la même manière le contenu de plusieurs fichiers dans le script, est-ce possible? Le meilleur que j'ai trouvé jusqu'à présent était:
cat file1.txt file2.txt > combined.txt && ./script < combined.txt
Qui utilise deux commandes et crée un fichier temporaire. Existe-t-il un moyen de faire la même chose en contournant la création du fichier combiné?
bash
shell
scripting
io-redirection
0x4B1D
la source
la source
zsh
et vous pourrez exécutercmd <file1 <file2 ... <fileN
;)Réponses:
Vous pouvez utiliser
cat
et un tuyau:Votre exemple, en utilisant un tuyau et aucun fichier temporaire:
la source
join
sans fichier temporaire, mais juste pour être clair pour le lecteur:cat f1 f2
ne produit pas la même sortie quejoin f1 f2
join
dans mon exemple parce que je jouais avec auparavant; en réalité, pour mon exemple que j'utilisaiscat
.Si vous ne souhaitez pas utiliser de canal, vous pouvez utiliser la redirection d'entrée avec substitution de processus:
la source
Pour ajouter la réponse de @Jonah Braun, si vous devez également ajouter une sortie de processus dans votre script, c'est-à-dire que votre fichier peut ne pas être sur votre disque mais accessible via en
URL
utilisantcurl
ou un outil similaire.Quelque chose comme ça pourrait être utilisé pour obtenir
stdout
plusieurs processus et les utiliser dans un script viastdin
Ce sera le script pour gérer l'entrée Contenu de
multi-input.sh
:Maintenant testez-le:
Production:
<()
transforme le processus en unefile
utilisation virtuellefd
si vous le souhaitez, il<
est donc nécessaire de le lire.cat
lui-même n'en a pas besoin car il fait ce qu'il fait, concatène des fichiers, virtuels ou réels.la source