Näen tällaisia komentoja joissakin skripteissä: /bin/cat somefile | someprogram
. Haluaisin tietää, kuinka lukea koko putki samalla tavalla kuin joku ohjelma. Joten kun suoritan /bin/cat something | myprogram.sh
, myprogram.sh: llä on mypipevar-niminen muuttuja, joka on yhtä suuri kuin mikä tahansa lähetetty – koko putkiteksti. Jos tämä on epäselvää, ilmoita siitä minulle. Olen lukenut, että lukeminen ei todennäköisesti toimi, ja bash ei välttämättä ole oikea kuori.
Vastaa
Putki yhdistää stdout
yhdestä ohjelmasta toisen stdin
-ohjelmaan, joten lue komentosarjassasi vain stdin
ja saat mitä edellinen komento tulosti. Yksinkertainen tapa lukea tämä muuttujaan on kissan kanssa esimerkiksi myprogram.sh
:
mypipevar="$(cat ${1:-/dev/stdin})" echo "Obtained the value: "$mypipevar""
Kuitenkin melko usein haluat käsitellä asioita rivi riviltä eikä kerralla, tämä voidaan tehdä
while read line do echo "$line" done < "${1:-/dev/stdin}"
Huomaa, että ${1:-/dev/stdin}
antaa sinulle ensimmäisen argumentin, tai jos argumentteja ei ole määritetty, /dev/stdin
, joka sisältää stdinin sisällön, joka voidaan lukea tiedostona. Tämän avulla voit suorittaa komentosarjan joko command | script
tai yksinkertaisesti nimellä script filename
.