Bagaimana cara saya menggunakan warna di MOTD?

17

Saya mengedit default/etc/update-motd.d/00-header , menambahkan beberapa warna untuk membuatnya lebih mudah dibaca:

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)"

Saya dapat menjalankan baris kode dengan baik di terminal, tetapi ketika saya mengedit 00-headerdengan informasi ini, saya mendapatkan kode melarikan diri yang dicetak dalam plaintext:

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

Bagaimana saya bisa menambahkan percikan warna ke pesan hari ini?

IQAndreas
sumber
Bagaimana Anda mengedit file, terutama karakter yang tidak dapat dicetak?
Volker Siegel
Di picosaya mengganti baris kode yang ada dengan kode o baris pertama yang saya sertakan dalam contoh saya. Masalahnya adalah parser MOTD kemudian diperlakukan \edan karakter berikutnya sebagai teks biasa dan bukan sebagai karakter khusus.
IQAndreas
Saya melihat dari headeer hak cipta dari file tertaut Anda di Ubuntu memang, jadi saya menambahkan tag masing-masing, karena relevan untuk menjawab (tentang shell yang digunakan, lihat jawaban saya).
Volker Siegel

Jawaban:

11

Dengan asumsi Anda berada di Ubuntu - yang menggunakan tanda hubung untuk menjalankan skrip sistem:

File itu,, /etc/update-motd.d/00-headerdijalankan oleh /bin/dash, (bukan /bin/bash,) yang cukup minimalis (dan cepat) -
sepertinya tidak mendukung "\ e" di tempat ini - gunakan "\ 033" sebagai gantinya.

Berbeda kapan mengembangkan kode pelarian.

Volker Siegel
sumber
3

Pada Debian / Ubuntu motddikonfigurasi di /etc/pam.d/sshd:

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

yang berarti bahwa setelah berhasil masuk sistem akan menjalankan sesuatu seperti:

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

di mana /etc/motdbagian statis (hanya dicetak, tidak bersumber).

Debian 9 / Ubuntu 16.04 :

Untuk menghasilkan bagian dinamis run-partsdigunakan untuk /etc/update-motd.ddirektori:

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

Untuk kode yang sedikit lebih mudah dibaca, Anda dapat menggunakan tput setaf {color number}. Perhatikan bahwa untuk mempertahankan warna kita harus mengatur TERMvariabel.

#!/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)"

simpan file sebagai contoh /etc/update-motd.d/10-uname

dan pastikan itu dapat dieksekusi:

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

Warna dasar diberi nomor:

  • 1 - Merah
  • 2 - Hijau
  • 3 - Kuning
  • 4 - Biru
  • 5 - Magenta
  • 6 - Cyan
  • 7 - Putih

Kode di atas menghasilkan: bash berwarna motd

Tergantung pada selera Anda, Anda dapat menghasilkan output yang lebih berwarna menggunakan lolcatatau pos dari figlet. Output yang dihasilkan menggunakan sintaks bash standar:

^[(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

Bagian dinamis diperbarui menggunakan /etc/init.d/motd startyang dijalankan sebagai berikut:

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