A csövek és azok használata a bash

Néhány parancsfájlban ilyen parancsokat látok: /bin/cat somefile | someprogram. Szeretném tudni, hogyan kell a teljes pipát ugyanúgy elolvasni, ahogy a someprogram. Tehát amikor futtatom az /bin/cat something | myprogram.sh fájlt, a myprogram.sh rendelkezik a mypipevar nevű változóval, amely megegyezik a pipedelel – az egész pip szöveggel. Ha ez nem világos, kérem, tudassa velem. Olvastam, hogy az olvasás valószínűleg nem fog működni, és a bash nem biztos, hogy a megfelelő shell.

Válasz

A cső összekapcsolódik stdout a másikból stdin, így a szkriptben egyszerűen olvassa el a következőt: stdin és megkapja, amit az előző parancs kinyomtatott. Ennek a változóba történő beolvasásának egyszerű módja a cat, például a myprogram.sh belül:

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

Azonban nagyon gyakran a sorokat akarja feldolgozni, nem pedig egyszerre, ezt megteheti

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

Vegye figyelembe, hogy ${1:-/dev/stdin} adja meg az első argumentumot, vagy ha nincs megadva argumentum, akkor /dev/stdin, amely fájlként olvasható stdin tartalmát fogja tartalmazni. Ez lehetővé teszi a szkript végrehajtását vagy command | script, vagy egyszerűen script filename.

néven.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük