Questa domanda mi ha infastidito per alcuni giorni, ed ecco il mio post modificato con tutto il materiale che ho imparato. In particolare, il mio obiettivo era quello di ottenere la visualizzazione dell'orologio accanto al prompt in BASH. Proprio come Radu Radeanu menzionato nella sua risposta, la chiave è trovare una funzione o una variabile in grado di aggiornare costantemente il prompt dei comandi o ridisegnare lo schermo, senza interferire con lo schermo o con qualsiasi cosa digiti. Mentre, questo è possibile ottenere con ciclo while, come mostrato da G_P, il costante ridisegno dello schermo con la funzione tput fa confusione con qualsiasi testo sia sullo schermo nel momento in cui si aggiorna. Mi sono avvicinato molto al raggiungimento di ciò che l'OP ha chiesto modificando in qualche modo il codice pubblicato da G_P, ma credo comunque che la risposta di Radu sia la più vicina a ciò che l'OP vuole. Senza ulteriori indugi, ecco alcune delle cose che
# 1, La mia soluzione preferita: Terminal Multiplexer
Il multiplexer terminale è un software che consente di dividere la schermata del terminale in due o più schermate. In particolare, voglio attirare l'attenzione sul terminale Byobu. Questo emulatore di terminale basato su ncurses, consente di mostrare il tempo, la percentuale della CPU, la memoria e un sacco di altri indicatori. Nella schermata del mio terminale byobu puoi vedere la temperatura della CPU, la percentuale della batteria, la qualità della connessione Internet, la frequenza della CPU, la RAM, la data e, naturalmente, l'ora. Se sei principalmente preoccupato di monitorare costantemente queste cose mentre sei nel terminal, Byobu è la strada da percorrere. In effetti, mi è piaciuto così tanto, l'ho impostato per il caricamento automatico durante l'accesso a tty. L'unica stranezza è che in tty non puoi davvero unire le finestre separate - passa solo da una scheda all'altra con i tasti F3 e F4.
Una soluzione alternativa che coinvolge finestre multiplexing è l'utilizzo splitvt
, che divide lo schermo in due parti. È possibile eseguire un terminale come tty-clock
, ad esempio , utilizzare il comando watch con date oppure è possibile codificarne uno da soli con uno script. Ne parleremo più avanti. Nello screenshot puoi vedere una parte della divisione con il normale prompt di bash in alto, e in quella inferiore puoi vedere uno script in esecuzione, che aggiorna costantemente l'output del date
comando con il clear
comando.
# 2, While Do Loop e tput
Questo è probabilmente il più vicino a ciò che la persona che ha posto la domanda voleva implementare con bash.
G_P ha pubblicato un'ottima soluzione che coinvolge i comandi while do
e tput
. Tuttavia nel codice di G_P c'erano due cose che non mi piacevano. Uno, l'orologio era a destra del prompt e due - poiché il ciclo di sospensione è di 1 secondo (fare riferimento al codice originale in cui si dice sospensione), lo schermo viene ridisegnato ogni secondo e questo rovina il mio output. Quello che ho fatto è stato modificare il mio prompt di bash in modo che fosse inferiore di una riga con l'operatore \ n e cambiare il codice di G_P in modo che l'operatore tput posizionasse l'orologio proprio sopra il prompt e si aggiornasse ogni 60 secondi; che mi permette di vedere ore e minuti (e non mi interessa esattamente i minuti), mentre il ciclo dell'orologio non rovina il mio schermo. Innanzitutto, ecco il mio prompt:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
Ed ecco il codice modificato di G_P: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
Piccola modifica : ho notato che questo codice sopra non porta subito l'orologio a volte. Ecco una versione migliore: while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
questa prima posiziona l'orologio sullo schermo, quindi fa sapere a bash di passare attraverso il ciclo del sonno di 60 secondi
Nota, la tput cup 0 0 posiziona l'orologio nell'angolo in alto a destra dello schermo, proprio sopra il mio prompt e sleep 60 cambia il ciclo di sleep in 60 secondi, perché in questo modo posso monitorare solo ore e minuti anziché ogni secondo. In questo modo, qualsiasi testo che ho sullo schermo non è interessato, per la maggior parte (solo quando mi capita di eseguire un comando nello stesso momento in cui si aggiorna l'orologio).
La linea PS1 è già nel tuo profilo .bashrc, quindi devi solo modificarlo un po '. Il ciclo while do dovrebbe essere aggiunto da qualche parte nello stesso file, preferibilmente alla fine con # comment che questa è roba che hai aggiunto inizialmente. E non dimenticare di eseguire sempre il backup di qualsiasi file del genere nel caso in cui tu faccia bubu e debba tornare indietro com'era.
# 3, Scripting e altro
Questa parte è solo per coloro che vogliono vedere il tempo. Per coloro che vogliono monitorarlo costantemente, # 1 e # 2 sono le opzioni preferite.
Quindi, come abbiamo già visto, il ciclo while do è piuttosto utile. Ecco come è possibile creare un orologio con comandi do do loop, date e sleep.
Premi Invio / Invio e in pratica vedrai l'output del comando data mostrato sullo schermo cancellato ogni secondo. Se non vuoi scrivere tutto questo ogni volta, trasforma tutto questo in script:
#!/bin/bash
while true
do
clear;date
sleep 1
done
Ora puoi eseguire quello script con splitvt in un'istanza di bash, mentre lavori nell'altra.
Un'altra soluzione è il watch -n1 date
comando, che eseguirà continuamente il comando data con un periodo di 1 secondo.
In conclusione: ho imparato alcune cose mentre cercavo di trovare la risposta a questa domanda e spero che i miei risultati ti abbiano aiutato in qualche modo e spero di essere stato in grado di contribuire a questa domanda. Byobu terminal IMHO è la soluzione migliore, ma decidi tu stesso, fai qualche ricerca e scegli il modo migliore per te.
Alcune delle cose che ho trovato durante la ricerca:
Il mio post originale, la soluzione minimalista: modifica il tuo file ~ / .bashrc. Preferisco modificarlo con nano, quindi
nano ~/.bashrc
Ecco la parte del mio file modificato:
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
Dopo la frase else la prima riga è commentata con # (questo è il mio vecchio prompt), ora la seconda riga è quella desiderata, e in particolare l' \t
operatore. Ciò mostra il tempo di esecuzione nel formato 24 ore. Per maggiori informazioni, dai un'occhiata a questo . Anche una piccola nota, sto usando le cose dopo l'altro, perché non sto usando il prompt colorato.
PS: Per favore fatemi sapere se dovrei aggiungere qualcosa alla mia risposta o modificarla in alcun modo, ma per la maggior parte credo che questa sia la risposta più conclusiva che potrei trovare, e almeno non aggiungerò personalmente nulla nuovo ad esso.
$PS1
variabile (prompt) in modo da avere il tempo, ma non sono sicuro che cambi.