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?


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.