A maneira mais simples é usar /dev/tty
como leitura para entrada de teclado.
Por exemplo:
#!/bin/bash
echo hello | while read line
do
echo We read the line: $line
echo is this correct?
read answer < /dev/tty
echo You responded $answer
done
Isso quebra se você não executar isso em um terminal e não permitir que a entrada seja redirecionada para o programa, mas funcionará muito bem.
Em geral, você pode pegar um novo identificador de arquivo baseado no stdin original e ler a partir dele. Observe a linha exec
e o read
#!/bin/bash
exec 3<&0
echo hello | while read line
do
echo We read the line: $line
echo is this correct?
read answer <&3
echo You responded $answer
done
Em ambos os casos, o programa parece um pouco com:
% ./y
We read the line: hello
is this correct?
yes
You responded yes
A segunda variação permite que a entrada também seja redirecionada
% echo yes | ./y
We read the line: hello
is this correct?
You responded yes