Essa pergunta me incomoda há alguns dias e aqui está meu post editado com todo o material que aprendi. Especificamente, meu objetivo era conseguir mostrar o relógio próximo ao prompt no BASH. Assim como Radu Radeanu mencionado em sua resposta, a chave é encontrar uma função ou variável capaz de atualizar constantemente o prompt de comando ou redesenhar a tela, sem interferir na tela ou no que você digitar. Enquanto isso é possível com o loop while, como mostra G_P, o constante redesenho da tela com a função tput interfere com o texto que estiver na minha tela no momento em que ela é atualizada. Eu cheguei bem perto de conseguir o que o OP pediu, modificando um pouco o código que G_P postou, mas ainda acredito que a resposta de Radu é a mais próxima do que o OP deseja. Sem mais delongas, aqui estão algumas das coisas que eu
# 1, Minha solução preferida: Terminal Multiplexer
O multiplexador de terminal é um software que permite dividir a tela do terminal em duas ou mais telas. Em particular, quero chamar a atenção para o terminal Byobu. Esse emulador de terminal baseado em ncurses, permite mostrar tempo, porcentagem de CPU, memória e vários outros indicadores. Na captura de tela do meu terminal byobu, você pode ver a temperatura da CPU, porcentagem da bateria, qualidade da conexão com a Internet, frequência da CPU, RAM, data e hora do curso. Se você está principalmente preocupado em monitorar constantemente essas coisas enquanto está no terminal, Byobu é o caminho a percorrer. Na verdade, eu gostei tanto que o configurei para carregar automaticamente durante o login no tty. A única peculiaridade é que, em tty, você não pode mesclar as janelas separadas - alterne apenas as guias com as teclas F3 e F4.
Uma solução alternativa que envolve janelas de multiplexação é usando splitvt
, que divide a tela em duas partes. Você pode executar um relógio do terminal, como tty-clock
usar o comando watch com a data ou pode codificar um com um script. Mais sobre isso mais tarde. Na captura de tela, você pode ver uma parte da divisão com o prompt bash normal na parte superior, e na parte inferior, um script em execução, que atualiza constantemente constantemente a saída do date
comando com o clear
comando.
# 2, Enquanto Do loop e tput
Esse é provavelmente o mais próximo do que a pessoa que fez a pergunta queria implementar com o bash.
O G_P postou uma ótima solução envolvendo os comandos while do
e tput
. No entanto, no código do G_P, havia duas coisas que eu não gostei. Um, o relógio estava à direita do prompt e dois - como o ciclo de suspensão é de 1 segundo (consulte o código original onde diz suspensão), a tela é redesenhada a cada segundo e isso atrapalha minha saída. O que fiz foi editar meu prompt do bash para ficar uma linha abaixo com o operador \ n e alterar o código do G_P para que o operador de tput posicionasse o relógio logo acima do prompt e atualizasse a cada 60 segundos; isso me permite ver horas e minutos (e não me importo exatamente com minutos), enquanto o loop do relógio não atrapalha minha tela. Primeiro, aqui está o meu prompt:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
E aqui está o código modificado do G_P: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
Edição pequena : notei que esse código acima não acelera o relógio às vezes. Aqui está uma versão melhor: while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
Este coloca o relógio na tela primeiro e depois informa ao bash para passar pelo ciclo de sono de 60 segundos
Observe que o copo tput 0 0 coloca o relógio no canto superior direito da tela, logo acima do meu prompt e o sono 60 muda o ciclo do sono para 60 segundos, porque dessa maneira eu posso monitorar apenas horas e minutos em vez de cada segundo. Dessa forma, qualquer texto que tenha na tela não será afetado, na maioria das vezes (apenas quando executar um comando no mesmo horário que o relógio é atualizado).
A linha PS1 já está no seu perfil .bashrc, então você só precisa ajustá-la um pouco. O loop while do deve ser adicionado em algum lugar do mesmo arquivo, de preferência no final com # comment que isso é algo que você adicionou inicialmente. E não se esqueça de sempre fazer backup de qualquer arquivo como esse para o caso de você fazer bubu e precisar voltar ao que era antes.
# 3, Script e outros
Esta parte é apenas para aqueles que querem ver o tempo. Para quem deseja monitorá-lo constantemente, os itens 1 e 2 são as opções preferidas.
Então, como já vimos, o loop while é bastante útil. Veja como você pode criar um relógio com os comandos while do loop, date e sleep.
Pressione return / enter, e você basicamente verá o comando output of date mostrado na tela limpa a cada segundo. Se você não quiser digitar tudo isso sempre, transforme tudo isso em script:
#!/bin/bash
while true
do
clear;date
sleep 1
done
Agora você pode executar esse script com splitvt em uma instância do bash, enquanto trabalha na outra.
Outra solução é o watch -n1 date
comando, que executará continuamente o comando date com período de 1 segundo.
Conclusão: aprendi algumas coisas enquanto tentava encontrar a resposta para essa pergunta, e espero que minhas descobertas tenham ajudado você de alguma forma, e espero poder contribuir com essa questão. O terminal IMHO do Byobu é a melhor solução, mas decida por si mesmo, faça algumas pesquisas e escolha a maneira que melhor lhe convier.
Algumas das coisas que encontrei ao pesquisar:
Minha postagem original, a solução minimalista: edite seu arquivo ~ / .bashrc. Eu prefiro editá-lo com nano, então
nano ~/.bashrc
Aqui está a parte do meu próprio arquivo editado:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
Após a declaração else, a primeira linha é comentada com # (esse é o meu prompt antigo), agora a segunda linha é a que você deseja e, especificamente, o \t
operador. Isso mostra o tempo de execução no formato de 24 horas. Para mais informações, confira isso . Também uma pequena nota: depois disso, estou usando o material, porque não estou usando o prompt colorido.
PS: Informe-me se devo adicionar alguma coisa à minha resposta ou editá-la de qualquer forma, mas, na maioria das vezes, acredito que essa é a resposta mais conclusiva que eu poderia ter, e pelo menos pessoalmente não adicionarei nada. novo nisso.
$PS1
variável (prompt) para ter o tempo, mas não tenho certeza se as alterações são alteradas.