Como obter um prompt após cada iteração do loop while?

Como obter um prompt após cada iteração do loop while?

Quero um prompt após cada iteração do loop.

POR EXEMPLO: Quando uma iteração é executada, preciso Press Enter to continuee novamente após a segunda iteração, novamente após a terceira e assim por diante.

Estou usando read -p " Press enter to continue "(mas isso está sendo ignorado).

while read line

do

echo "$line" logs""

echo " "

echo "`tail -100 Domain1."$line"`"

read -p "Press enter to continue"

done<input.txt

Responder1

Seu read -pinterior do loop está sendo "ignorado" (na verdade não) porque está lendo input.txt. Todos os comandos dentro do loop herdarão seu fluxo de entrada padrão do loop por padrão, e isso está conectado ainput.txt

Em vez disso, você terá que fazer a read lineleitura de um novo descritor de arquivo de entrada e entregar o conteúdo do arquivo:

while IFS= read -r line <&3; do
    printf '%s logs\n\n' "$line"
    tail -n 100 "Domain1.$line"
    read -p 'Press Enter to continue'
done 3<input.txt

Aqui, usamos o descritor de arquivo 3 (o próximo descritor de arquivo gratuito e disponível após os padrão) e o conectamos ao arquivo de entrada. Pedimos então read lineexplicitamente para lerquedescritor de arquivo, em vez de sua entrada padrão (descritor de arquivo 0). Isso deixa a entrada padrão livre e a read -pleitura será feita normalmente.

Alternativamente, você pode trocar os descritores do arquivo de entrada no loop acima:

while IFS= read -r line; do
    printf '%s logs\n\n' "$line"
    tail -n 100 "Domain1.$line"
    read -p 'Press Enter to continue' <&3
done 3<&0 <input.txt

Agora a read lineleitura do arquivo por meio da entrada padrão comum herdada do loop enquanto read -plê do descritor de arquivo 3. O descritor de arquivo 3 é aberto como uma cópia da entrada padrão antes que a entrada padrão seja redirecionada do arquivo.

Na bashcasca,

read <&3

também poderia ser escrito

read -u 3

Portanto, a solução "mais limpa" (no sentido de conter a menor quantidade de sintaxe de malabarismo do descritor de arquivo) pode ser algo como

while IFS= read -u 3 -r line; do
    printf '%s logs\n\n' "$line"
    tail -n 100 "Domain1.$line"
    read -p 'Press Enter to continue'
done 3<input.txt

informação relacionada