Comando ctrl + c em while

1. Comando ctrl + c em while

Lorran Alves
Holder_92

(usa Outra)

Enviado em 13/08/2016 - 13:23h


Pessoal, preciso de monitorar um log entre outras rotinas na máquina, porem preciso necessariamente dar um more ou vi num arquivo e sair dele depois de x minutos.

while [ true ]
do
more arquivo.txt;
sleep 5m;
df -h;
sleep 1m;
clear;
done;

Porém no more eu teria que dar uma ctrl+c em schell pra ele sair do arquivo e continuar o loop, estagnei nesta parte, preciso sair deste aquivo.

Obrigado


  


2. Re: Comando ctrl + c em while

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/08/2016 - 15:27h

Holder_92 escreveu:


Pessoal, preciso de monitorar um log entre outras rotinas na máquina, porem preciso necessariamente dar um more ou vi num arquivo e sair dele depois de x minutos.

while [ true ]
do
more arquivo.txt;
sleep 5m;
df -h;
sleep 1m;
clear;
done;

Porém no more eu teria que dar uma ctrl+c em schell pra ele sair do arquivo e continuar o loop, estagnei nesta parte, preciso sair deste aquivo.

Obrigado



Boa tarde.
Sugestão....
"PEGA" o "PID" do processo "MORE", e da um kill nele . . .
PID=$(ps aux|egrep 'more'|egrep -v 'grep'|awk -F" " '{print $2}') 


att.:
marcelo oliver



3. Re: Comando ctrl + c em while

Lorran Alves
Holder_92

(usa Outra)

Enviado em 13/08/2016 - 16:32h

Este processo é automatico nao pode ser manual teria que rodar dois scripts em pararelo uma que se ele entrar no more ele nao executa o restante do loop.


4. Re: Comando ctrl + c em while

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 13/08/2016 - 19:49h

Primeiro:
apt-get install xdotool 

Ou use o gerênciador de pacotes da sua distro para instalá-lo

Sege um exemplo funcional abaixo:
#!/bin/bash

less /etc/passwd &
sleep 3
fg 1
xdotool key q

while true; do
echo "continue"
sleep 1
done


EDIT: Usei o less por ser mais bonito o output

----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


5. Re: Comando ctrl + c em while

Lorran Alves
Holder_92

(usa Outra)

Enviado em 13/08/2016 - 20:24h

Consegui fazer em duas telas distinstas

1 tela mostra os resultados:

while [ true ]; do tail -f alert_DB11G.log; sleep 10s; clear;df -h; clear; sleep 15s; done;


2 tela para matar o processo:

while [ true ]; do PID=$(ps aux|egrep 'tail -f alert_DB11G.log'|egrep -v 'grep'|awk -F" " '{print $2}');kill -9 $PID;sleep 30s;done;

acho que deve dar pra colocar um loop dentro do outro sem a necessidade de 2 telas.






6. Re: Comando ctrl + c em while

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/08/2016 - 20:53h

Tenho algumas dúvidas, mas o comando trap pode ajudar em algo?
Está interno em BASH.

Outra coisa, você pode usar while true sem colchetes.

trap: trap [-lp] [[arg] signal_spec ...]
Trap signals and other events.

Defines and activates handlers to be run when the shell receives signals
or other conditions.

ARG is a command to be read and executed when the shell receives the
signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC
is supplied) or `-', each specified signal is reset to its original
value. If ARG is the null string each SIGNAL_SPEC is ignored by the
shell and by the commands it invokes.

If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. If
a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command. If
a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a
script run by the . or source builtins finishes executing. A SIGNAL_SPEC
of ERR means to execute ARG each time a command's failure would cause the
shell to exit when the -e option is enabled.

If no arguments are supplied, trap prints the list of commands associated
with each signal.

Options:
-l print a list of signal names and their corresponding numbers
-p display the trap commands associated with each SIGNAL_SPEC

Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.
Signal names are case insensitive and the SIG prefix is optional. A
signal may be sent to the shell with "kill -signal $$".

Exit Status:
Returns success unless a SIGSPEC is invalid or an invalid option is given.


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



7. Re: Comando ctrl + c em while

Lorran Alves
Holder_92

(usa Outra)

Enviado em 13/08/2016 - 21:23h

Finalmente consegui sem ter que instalar programas adicionais.

while [ true ];
do PID=$(ps aux|egrep 'tail -f alert_DB11G.log'|egrep -v 'grep'|awk -F" " '{print $2}');
echo "############################################";
kill -9 $PID;
tail -f alert_DB11G.log & sleep 10s;
clear;
echo "############################################";
df -h;
echo "############################################";
sleep 10s;
clear;
done;

Fica aqui se alguem precisar um dia ou quiser melhorar.

Obrigado a todos.


8. Re: Comando ctrl + c em while

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/08/2016 - 11:36h

Holder_92 escreveu:

Finalmente consegui sem ter que instalar programas adicionais.

while [ true ];
do PID=$(ps aux|egrep 'tail -f alert_DB11G.log'|egrep -v 'grep'|awk -F" " '{print $2}');
echo "############################################";
kill -9 $PID;
tail -f alert_DB11G.log & sleep 10s;
clear;
echo "############################################";
df -h;
echo "############################################";
sleep 10s;
clear;
done;

Fica aqui se alguém precisar um dia ou quiser melhorar.
Obrigado a todos.

____________________________________________________________
Bom dia Holder, dei uma simplificada . . .
Substitui o "tail -f" pelo "tail -n", para evitar a "matança de processo" . . . :)
Segue:
#!/bin/bash
LINHA() { printf '\n%*s\n\n' "55" '' | sed "s/ /#/g" ; }
while true;do
LINHA
tail -n45 alert_DB11G.log
LINHA
sleep 10;tput clear
LINHA
df -h
LINHA
sleep 10;tput clear
done


att.:
marcelo oliver


9. Re: Comando ctrl + c em while

Lorran Alves
Holder_92

(usa Outra)

Enviado em 14/08/2016 - 16:56h

Show de bola Marcelo,

Não tinha pensado no tail -n que com certeza otimizou e muito.

Obrigado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts