A execução de watch tail -n 15 /tmp/vpn.log / tail -f /tmp/vpn.log no script interrompe a sua execução, porque ao executar watch tail -n 15 /tmp/vpn.log / tail -f /tmp/vpn.log o shell está ocupado executando watch tail -n 15 /tmp/vpn.log / tail -f /tmp/vpn.log ;
Geralmente, uma solução poderia estar executando o processo como um trabalho em segundo plano ou executando o processo separadamente do shell atual de qualquer forma, no entanto, como você precisa ver a saída do processo em questão, uma boa maneira de fazer isso seria para executá-lo em uma nova instância gnome-terminal :
#!/bin/bash
touch /tmp/vpn.log
gnome-terminal -e 'bash -c "echo $$ > pid; tail -f /tmp/vpn.log"'
echo "Starting to output to /tmp/vpn.log"
echo line1 >> /tmp/vpn.log
sleep 1
echo line2 >> /tmp/vpn.log
sleep 1
echo line3 >> /tmp/vpn.log
kill -15 "$(< pid)"
rm pid
exit 0
-
touch /tmp/vpn.log: cria um arquivo de tamanho 0 chamado "vpn.log" em/tmp, se não existir, ou atualiza o acesso e a hora de modificação de/tmp/vpn.log, se houver; isso é feito para garantir quetail -f [...]não saia no erro; -
gnome-terminal -e 'bash -c "echo $$ > pid; tail -f /tmp/vpn.log"': gera uma instânciagnome-terminale gera uma instânciabashdentro da instânciagnome-terminal, que envia seu PID para um arquivo chamado "pid" e executatail -f /tmp/vpn.log; -
kill -15 "$(< pid)": envia um sinal SIGTERM para a instânciabashem execução dentro da instânciagnome-terminal; -
rm pid: remove "pid";