
編集しましたデフォルト/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
静的な部分(印刷のみ、ソースではない)はどこですか。
デビアン 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 – 白
好みに応じて、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
デビアン 8 / Ubuntu 14.04
動的部分は/etc/init.d/motd start
、以下を実行して更新されます。
uname -snrvm > /var/run/motd.dynamic
答え3
カラー コードの前にANSI エスケープ文字を挿入します。Vim を使用している場合は、または編集モードで を<ESC>
押します。Ctrl+K ESC
Ctrl+v+[
^[
次に、希望するカラーコードを入力します。たとえば、前景色を赤にします。[31m
^[[31mHello! Glad to see you again^[[0m
先頭には^[
エスケープ文字があることを示すインジケータが表示され、[31m
実際の文字は手動で入力されます。