Wie zeige ich die einfache Verfügbarkeit in der Statusleiste von tmux an?

7

Ich möchte die Betriebszeit in der tmux-Statusleiste im Format anzeigen DD:HH:MM, ohne die andere Cruft, die der uptimeBefehl anzeigt.

Ich habe diese ausprobiert:

#set -g status-left '#[fg=green]#H #[fg=black]•#[fg=green,bright]#(uptime|awk '{split(substr($0, index($0, "load")),a, ":"); print a[2]})'#[default]'
set -g status-right '#[fg=red,bg=default]#(uptime) #[fg=blue]%a%d-%m-%Y %H:%M:%S'

Beides funktioniert nicht wie ich will. Ich möchte nur eine direkte Betriebszeit von DD:HH:MM, die alle 30 Sekunden mit dem normalen Statusleisten-Update aktualisiert wird.

Boudiccas
quelle

Antworten:

8

Hier können Sie awkdie Ausgabe von so analysieren uptime, dass sie Ihren Anforderungen entspricht:

set -g status-right '#[fg=red,bg=default]#(uptime | awk '{print $3}'|sed 's/,//') #[fg=blue]%a%d-%m-%Y %H:%M:%S'

Gibt normalerweise uptimediese Art von Ausgabe zurück:

$ uptime
 15:30:24 up  1:59,  4 users,  load average: 2.39, 2.08, 2.12

Durch die Verwendung können awkwir alles rund um die Betriebszeit loswerden.

$ uptime | awk '{print $3}'|sed 's/,//'
2:47

Sie können auch verwenden /proc/uptime, um die tatsächlichen Sekunden abzurufen, die das System in Betrieb war, und dann die Sekunden verwenden awkoder perlum sie in Tage, Stunden, Minuten usw. umzuwandeln.

$ awk '{printf("%d:%02d:%02d:%02d",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime
0:02:49:55

Dies zeigt die Sekunden der Verfügbarkeit in DD: HH: MM: SS.

Sie können sie auch mit Perl anzeigen:

$ cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/36003600)/60),$1%60' 
00:02:50:53

tmux zitieren?

Wie @JasonwRyan in den Kommentaren erwähnt hat, tmuxkann es notorisch schwierig sein, die Befehle genau richtig zu zitieren. Hier erfahren Sie, wie Sie das oben angegebene awkBeispiel zitieren können .

set -g status-right '#[fg=red,bg=default]#(uptime | awk \"{print \\$3}\"|sed \"s/,//\") #[fg=blue]%a%d-%m-%Y %H:%M:%S'

Es ist jedoch wahrscheinlich einfacher, die Befehle einfach in ein Shell-Skript tmuxeinzufügen und dies aus der Konfigurationsdatei heraus aufzurufen :

set -g status-right '#[fg=red,bg=default]#(somecommand.bash) #[fg=blue]%a%d-%m-%Y %H:%M:%S'

Verweise

slm
quelle
Du schneidest die aktuelle Zeit :) Das sollte es tun : uptime| cut -d" " -f4-|cut -d, -f1. Es ist jedoch nicht immer DD: HH: MM, zumindest auf meinem System.
Paulo Almeida
Sobald die Betriebszeit mehr als einen Tag beträgt, awkändern sich die Felder ...
Jasonwryan
@PauloAlmeida - danke für das Feedback. Ich habe das komplett verpasst 8-).
slm
@PauloAlmeida - Ich habe meinen Ansatz so geändert, dass er sich mit der uptimeVerwendung von awkund befasst sed. Ihr Ansatz würde auch funktionieren. Ich habe meine Antwort auch so angepasst, dass sie /proc/uptimestattdessen eine Lösung enthält .
slm
3
@ user205787 tmuxist notorisch unversöhnlich von Anführungszeichen in der Statusleiste: Sie können die FAQ auf der Flucht sehen oder einfach das awkSkript aus einer externen Datei
aufrufen
2

Eine Alternative ist zu verwenden uptime -p:

#(uptime -p)

Beispielausgabe:

up 4 hours, 17 minutes

Ich weiß, das ist nicht genau das, was du wolltest, aber nah dran

Durgashankar Giridharan
quelle