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-terminal
e gera uma instânciabash
dentro 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ânciabash
em execução dentro da instânciagnome-terminal
; -
rm pid
: remove "pid";