Eu encontrei os problemas de 'roubo de cores' com watch , porque o watch usa um estilo simples de saída / bin / sh, que provoca alguma cor, apelidos, atalhos ... a coisa toda!
Então, eu juntei tudo isso, colocado em meu .bashrc , permite que eu use todos os meus próprios atalhos, atalhos e outros enfeites:
Usage:
watcher 20 'somecommand | apipe | grep'
O número é o atraso entre as atualizações, em segundos, o comando pode incluir qualquer coisa que você possa citar.
###### 'watch' workalike, lets me use my aliases and such
function watcher() { WATCHERTIME=$1 ; WATCHERFILE=/tmp/watcher$$ ; shift ; while true ; do WATCHERHEIGHT=$(($LINES - 5)) ; ( eval $* ) | tail -n ${WATCHERHEIGHT} > ${WATCHERFILE} 2>/dev/null; clear ; /bin/echo -n "Every ${WATCHERTIME} seconds - " ; date ; /bin/echo ; cat ${WATCHERFILE} ; \rm -f ${WATCHERFILE} ; /bin/echo ; /bin/echo "==" ; sleep ${WATCHERTIME} ; done ; }
Para dividir:
function watcher()
{
WATCHERTIME=$1
WATCHERFILE=/tmp/watcher$$
shift
while true; do
WATCHERHEIGHT=$(($LINES - 5))
( eval $* ) | tail -n ${WATCHERHEIGHT} > ${WATCHERFILE} 2>/dev/null
clear
/bin/echo -n "Every ${WATCHERTIME} seconds - "
date
/bin/echo
cat ${WATCHERFILE}
\rm -f ${WATCHERFILE}
/bin/echo
/bin/echo "=="
sleep ${WATCHERTIME}
done
}
Ele determina a altura da tela atual em linhas, subtrai o suficiente para sua própria saída, depois executa repetidamente o comando fornecido, então limpa a tela, exibe a saída e aguarda o próximo loop. Ele exibe um curto "==" na parte inferior para indicar onde a saída terminou. Às vezes é útil saber disso.
Eu fiz desta maneira, então houve o menor atraso possível ao exibir. se você não capturar a saída e, em seguida, exibir, você terá uma longa pausa e, em seguida, a saída ... icky.
Como não estraga as cores, você obtém tudo o que está acostumado a obter. Aproveite!