chciałbym zrobić coś takiego:napisać skrypt bash, który odczytuje z rury
cat file.txt | ./myscript.sh
plik.txt
http://google.com
http://amazon.com
...
Jak można odczytać dane w myscript.sh?
chciałbym zrobić coś takiego:napisać skrypt bash, który odczytuje z rury
cat file.txt | ./myscript.sh
plik.txt
http://google.com
http://amazon.com
...
Jak można odczytać dane w myscript.sh?
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; }
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"
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
Mogłabyś użyj czegoś takiego:
while read line; do
echo $line;
done
Czytaj dalej tutaj: Bash script, read values from stdin pipe
Nie potrzebujesz '
Dzięki, ty' w porządku. Poprawiłem to. – ConcurrentHashMap
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