2013-02-11 15 views

Odpowiedz

2

Można oszukać read do zaakceptowania z rury jak ten:

echo "hello world" | { read test; echo test=$test; } 

lub nawet napisać funkcję tak:

read_from_pipe() { read "[email protected]" <&0; } 
+0

To nie jest "oszukiwanie" "czytaj". Problem nie polega na czytaniu z potoku, jest to, że zmienna, która "odczytuje" ustawia się w podpowłoce, która znika po zakończeniu potoku. – chepner

10

Można to zrobić za pomocą linii while loop (proces przez linię), jest to zwykły sposób na tego rodzaju rzeczy:

#!/bin/bash 

while read a; do 
    # something with "$a" 
done 

dla futra nne informacje, patrz http://mywiki.wooledge.org/BashFAQ/001


Jeśli zamiast tego chcesz SLURP cały plik w zmiennej, spróbuj to zrobić:

#!/bin/bash 

var="$(cat)" 
echo "$var" 

lub

#!/bin/bash 

var="$(</dev/stdin)" 
echo "$var" 
+0

Jeśli skrypt zawiera po prostu fragment potoku, np. polecenie sed, możesz (po określeniu interpretera '#!/bin/bash') po prostu cat to:' cat | sed 's/abc/def/g'' – valid

Powiązane problemy