Putket ja niiden käyttö bash

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *