Напишите bash script, который читается из трубы
Я хотел бы сделать что-то вроде этого:
cat file.txt | ./myscript.sh
file.txt
http://google.com
http://amazon.com
...
Как читать данные в myscript.sh?
Ответы
Ответ 1
Вы можете сделать это с помощью while loop
(процесс за строкой), это обычный способ для таких вещей:
#!/bin/bash
while read a; do
# something with "$a"
done
Для получения дополнительной информации см. http://mywiki.wooledge.org/BashFAQ/001
Если вместо этого вы захотите разбить целый файл в переменной, попробуйте сделать это:
#!/bin/bash
var="$(cat)"
echo "$var"
или
#!/bin/bash
var="$(</dev/stdin)"
echo "$var"
Ответ 2
Вы можете обмануть read
для приема из такого канала:
echo "hello world" | { read test; echo test=$test; }
или даже написать такую функцию:
read_from_pipe() { read "[email protected]" <&0; }
Ответ 3
Вы можете использовать что-то вроде этого:
while read line; do
echo $line;
done
Подробнее здесь: Bash script, читать значения из stdin pipe