/ Polecenie / Read nie działa zgodnie z oczekiwaniami z powodu While [duplikat] - linux, bash, macos, shell, unix

Polecenie odczytu nie działa zgodnie z oczekiwaniami z powodu While [duplicate] - linux, bash, macos, shell, unix

Staję przed dziwnym błędem,

Mam plik, który ma pewne dane wejściowe i na podstawie tych danych pytam o potwierdzenie użytkownika i kontynuuję czynności (jak pokazano poniżej),

#!/bin/bash

func() {
cat testing | while read line
do
if [ $line = "hi" ]
then
while true
do
read -p "[y/n] : " c
case $c in
[nN] ) return 1;;
[yY] ) return 0;;
* ) echo "Enter y/Y or n/N";;
esac
done
fi
echo "HELLO !!"
done
}

func

Ze względu na podczas czytania linii w funkcji rzeczywista przeczytaj -p "[y / n]:" wybiera dane wejściowe z powyższego testowanie plik, a nie od STDIN.

Program działa poprawnie, jeśli usuniesz testowanie kotów | podczas czytania linii pętla (co oczywiście nie jest tym, czego chcę).

Czy ktoś wcześniej zmierzył się z tym problemem lub Czy ktoś może mi pomóc rozwiązać ten problem?

Z góry dziękuję !

Odpowiedzi:

2 dla odpowiedzi № 1

Użyj innego deskryptora pliku (i nie rura) testing.

while IFS= read -r line <&3; do
...
done 3< testing