Țevi și modul în care le folosești în bash

Văd comenzi de genul acesta în unele scripturi: /bin/cat somefile | someprogram. Aș dori să știu cum să citesc întreaga conductă la fel ca un program. Deci, când rulez /bin/cat something | myprogram.sh, myprogram.sh are o variabilă numită mypipevar egală cu orice a fost canalizat – tot textul țevii. Dacă acest lucru nu este clar, vă rugăm să ne anunțați. Am citit că citirea probabil nu va funcționa și este posibil ca bash să nu fie shell-ul potrivit.

Răspuns

Conducta se conectează stdout al unui program la stdin al altuia, deci în scriptul dvs. citiți pur și simplu din stdin și veți obține ceea ce a imprimat comanda anterioară. O modalitate simplă de a citi acest lucru într-o variabilă este cu cat, de exemplu în interiorul myprogram.sh:

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

Cu toate acestea, destul de de multe ori doriți să procesați lucrurile rând cu rând mai degrabă decât dintr-o dată, acest lucru se poate face cu

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

Rețineți că ${1:-/dev/stdin} vă va oferi primul argument sau, dacă nu sunt specificate argumente, atunci /dev/stdin care va conține conținutul stdin care poate fi citit ca un fișier. Acest lucru vă permite să executați scriptul fie ca command | script, fie pur și simplu ca script filename.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *