Wie verwende ich Farben im MOTD?

Wie verwende ich Farben im MOTD?

Ich habe bearbeitetder Standard/etc/update-motd.d/00-header, mit etwas Farbe, um es leichter lesbar zu machen:

printf "Welcome to \e[1;34m%s\e[0m \e[2m(%s %s %s)\e[0m\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"

Ich kann diese Codezeile problemlos in einem Terminal ausführen, aber wenn ich sie 00-headermit diesen Informationen bearbeite, werden mir die Escape-Codes im Klartext ausgedruckt:

Welcome to \e[1;36mUbuntu 13.10\e[0m \e[2m(GNU/Linux 3.11.0-23-generic i686)\e[0m

Wie kann ich der Botschaft des Tages einen Farbtupfer verleihen?

Antwort1

Angenommen, Sie verwenden Ubuntu, das Dash zum Ausführen von Systemskripten verwendet:

Diese Datei /etc/update-motd.d/00-headerwird ausgeführt von/bin/dash, (nicht /bin/bash,), was ziemlich minimalistisch (und schnell) ist -
es scheint nicht zu unterstützen die"\e"an dieser Stelle - verwenden"\033"stattdessen.

Es ist unterschiedlich, wann Escape-Codes erweitert werden.

Antwort2

Unter Debian/Ubuntu motdist die Konfiguration wie folgt /etc/pam.d/sshd:

session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

Das bedeutet, dass das System nach einer erfolgreichen Anmeldung etwa Folgendes ausführt:

cat /run/motd.dynamic
if [[ -f /etc/motd ]]; then cat /etc/motd; fi

wo /etc/motdist der statische Teil (nur gedruckt, keine Quelle).

Debian 9 / Ubuntu 16.04:

Zur Generierung des dynamischen Teils run-partswird für /etc/update-motd.ddas Verzeichnis verwendet:

/usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d

Für etwas besser lesbaren Code können Sie verwenden tput setaf {color number}. Beachten Sie, dass wir zum Beibehalten der Farben die Variable festlegen müssen TERM.

#!/bin/sh
export TERM=xterm-256color

read one five fifteen rest < /proc/loadavg
echo "$(tput setaf 2)
Kernel: `uname -v | awk -v OFS=' ' '{print $4, $5}'`
$(tput setaf 4)Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
$(tput setaf 5)
 ______________
< Hello World! >
 --------------
        \\   ^__^
         \\  (oo)\\_______
            (__)\\       )\\\/\\
                ||----w |
                ||     ||

$(tput sgr0)"

Speichern Sie die Datei zB als/etc/update-motd.d/10-uname

und stellen Sie sicher, dass es ausführbar ist:

chmod +x /etc/update-motd.d/10-uname

Die Grundfarben sind nummeriert:

  • 1 – Rot
  • 2 – Grün
  • 3 – Gelb
  • 4 – Blau
  • 5 – Magenta
  • 6 – Cyan
  • 7 – Weiß

Der obige Code generiert: Bash farbiges Motiv

Je nach Geschmack können Sie mit lolcatoder Überschriften aus eine farbenfrohere Ausgabe erzeugen figlet. Die generierte Ausgabe verwendet die Standard-Bash-Syntax:

^[(B^[[m
^[[32m
Kernel: 4.9.65-3+deb9u2 (2018-01-04)
^[[34mLoad Averages......: 0.04, 0.05, 0.05 (1, 5, 15 min)
^[[35m
 ______________
< Hello World! >
 --------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

^[(B^[[m

Debian 8 / Ubuntu 14.04

Der dynamische Teil wird aktualisiert, indem /etc/init.d/motd startFolgendes ausgeführt wird:

uname -snrvm > /var/run/motd.dynamic

Antwort3

Fügen Sie vor dem Farbcode ein ANSI- <ESC>Escapezeichen ein. Wenn Sie Vim verwenden, drücken Sie Ctrl+K ESCoder Ctrl+v+[im Bearbeitungsmodus.

^[

Schreiben Sie dann den gewünschten Farbcode. Lassen Sie es beispielsweise rot im Vordergrund sein[31m

^[[31mHello! Glad to see you again^[[0m

Der Anfang ^[sollte ein Hinweis darauf sein, dass es sich um ein Escape-Zeichen und [31mdie tatsächlichen, von Hand eingegebenen Zeichen handelt.

verwandte Informationen