Quero um prompt após cada iteração do loop.
POR EXEMPLO: Quando uma iteração é executada, preciso Press Enter to continue
e 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 -p
interior 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 line
leitura 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 line
explicitamente 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 -p
leitura 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 line
leitura do arquivo por meio da entrada padrão comum herdada do loop enquanto read -p
lê 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 bash
casca,
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