如何在 MOTD 中使用顏色?

如何在 MOTD 中使用顏色?

我編輯過預設值/etc/update-motd.d/00-header,添加一些顏色以使其更易於閱讀:

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

我可以在終端機中很好地運行該行程式碼,但是當我00-header使用此資訊進行編輯時,我會以純文字形式列印出轉義程式碼:

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

如何為當天的消息增添一抹色彩?

答案1

假設您使用的是 Ubuntu - 它使用 dash 來運行系統腳本:

該文件/etc/update-motd.d/00-header是由/bin/dash,(不是/bin/bash,)這是相當簡約的(而且很快) -
它似乎不支持“\e”在這個地方 - 使用“\033”反而。

何時擴展轉義碼是不同的。

答案2

在 Debian/Ubuntu 上motd配置為/etc/pam.d/sshd

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

這意味著成功登入後系統將運行如下內容:

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

其中/etc/motd是靜態部分(僅列印,未來源)。

Debian 9 / Ubuntu 16.04:

run-parts用於產生目錄的動態部分/etc/update-motd.d

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

對於更具可讀性的程式碼,您可以使用tput setaf {color number}.請注意,為了保留顏色,我們必須設定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)"

將文件另存為例如/etc/update-motd.d/10-uname

並確保它是可執行的:

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

基本顏色編號:

  • 1 – 紅色
  • 2 – 綠色
  • 3 – 黃色
  • 4 – 藍色
  • 5 – 洋紅色
  • 6 – 青色
  • 7 – 白色

上面的程式碼產生: bash 彩色 mod

根據您的品味,您可以使用lolcat或 的標題產生更豐富多彩的輸出figlet。產生的輸出使用標準 bash 語法:

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

動態部分使用/etc/init.d/motd start執行以下命令進行更新:

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

答案3

<ESC>在顏色代碼之前插入 ANSI轉義字元。如果您使用 Vim,它將處於按下Ctrl+K ESCCtrl+v+[處於編輯模式。

^[

然後寫下你想要的顏色代碼。例如,讓它成為紅色前景[31m

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

開頭^[應該是一個指示符,表明存在轉義字符,並且[31m是手寫的真實字符。

相關內容