Pipes, en hoe ze te gebruiken in bash

Ik zie commandos als deze in sommige scripts: /bin/cat somefile | someprogram. Ik zou graag willen weten hoe ik de hele pijp op dezelfde manier moet lezen als een programma. Dus als ik /bin/cat something | myprogram.sh draai, heeft myprogram.sh een variabele met de naam mypipevar die gelijk is aan datgene wat werd doorgesluisd – alle pijptekst. Laat het me weten als dit onduidelijk is. Ik heb gelezen dat read waarschijnlijk niet zal werken, en bash is misschien niet de juiste shell.

Answer

De pijp verbindt stdout van het ene programma naar stdin van een ander, dus lees in uw script gewoon van stdin en u krijgt wat het vorige commando heeft uitgeprint. Een eenvoudige manier om dit in een variabele in te lezen is met cat bijvoorbeeld in myprogram.sh:

mypipevar="$(cat ${1:-/dev/stdin})" echo "Obtained the value: "$mypipevar"" 

vaak wil je dingen regel voor regel verwerken in plaats van allemaal tegelijk, dit kan gedaan worden met

while read line do echo "$line" done < "${1:-/dev/stdin}" 

Merk op dat ${1:-/dev/stdin} geeft je het eerste argument, of als er geen argumenten zijn gespecificeerd dan /dev/stdin die de inhoud van stdin zal bevatten die kan worden gelezen als een bestand. Hierdoor kunt u het script uitvoeren als command | script of gewoon als script filename.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *