Eu acho que sei o que é. Como você está redirecionando a entrada para o loop while, o nano não vê mais o seu terminal no stdin. Tente substituir
nano -w file.log
com
nano -w file.log < /dev/tty
Eu tenho um punhado de servidores que têm um arquivo de log que eu gostaria de monitorar. Como o projeto é novo e a maioria dos erros até agora tem sido única, gostaria de monitorar esses registros manualmente por um tempo. Eu estava esperando economizar um pouco de tempo colocando todos os IPs para monitorar em um arquivo de texto, depois fazendo algo simples como:
#!/bin/bash
while read ip; do
scp user@"$ip":/var/log/file.log ./
nano -w file.log
rm -f file.log
done < ips.txt
No entanto, o Nano (e o Vi) são desativados, pois parece que o loop de Bash não espera que eu os saia antes de continuar com o próximo comando.
Como faço para que o loop de Bash espere que eu saia do editor de texto antes de continuar? Sinta-se à vontade para ser técnico em explicar a resposta; parte da razão pela qual eu estou perguntando é porque eu não sei o suficiente sobre o Bash para saber por que isso está acontecendo, mas eu gostaria de saber.
Considere ...
#!/bin/bash
while read ip; do
scp user@"$ip":/var/log/file.log ./
nano -w file.log && rm -f file.log
done < ips.txt
O &&
aguardará um comando ser concluído com sucesso (retornar com 0) antes de fazer as instruções à direita dele.
edit: woops, depois de executar o comando, o @glennjackman está certo. Além disso, se você quiser aprender algumas coisas, considere a leitura do Bash para iniciantes do TLDP e < a href="http://tldp.org/LDP/abs/html/"> Bash avançado do TLDP
Envolva-o em uma chamada para time
Exemplo:
time nano -w file.log
Haverá alguma saída vomitada, o que eu suponho que você poderia redirecionar para / dev / null se quiser, mas o "tempo" deve ser considerado ainda em execução, diferentemente da maneira como os editores se comportam.