Напишите 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; }