Potrubí a jak je používat v bash

V některých skriptech vidím takovéto příkazy: /bin/cat somefile | someprogram. Chtěl bych vědět, jak číst celou rouru stejně, jako to dělá nějaký program. Takže když spustím /bin/cat something | myprogram.sh, má myprogram.sh proměnnou nazvanou mypipevar rovnou cokoli, co bylo pipedováno – celý text kanálu. Pokud to není jasné, dejte mi prosím vědět. Přečetl jsem si, že čtení pravděpodobně nebude fungovat a bash nemusí být tím správným shellem.

Odpověď

Spojení potrubí stdout jednoho programu na stdin jiného, takže ve vašem skriptu jednoduše přečtěte z stdin a dostanete to, co vytiskl předchozí příkaz. Jednoduchý způsob, jak to načíst do proměnné, je například cat uvnitř myprogram.sh:

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

Nicméně často chcete věci zpracovávat řádek po řádku, nikoli najednou, lze to provést pomocí

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

Všimněte si, že ${1:-/dev/stdin} vám dá první argument, nebo pokud nejsou zadány žádné argumenty, pak /dev/stdin který bude obsahovat obsah stdin, který lze číst jako soubor. To vám umožní spustit skript buď command | script nebo jednoduše jako script filename.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *