MOTDで色を使用するにはどうすればよいですか?


17

デフォルト/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

その日のメッセージに色のしぶきを追加するにはどうすればよいですか?


ファイル、特に印刷できない文字をどのように編集しましたか?
フォルカーシーゲル14年

pico、既存のコード行を、例に含めたコードの最初の行に置き換えました。問題は、MOTDパーサーが\e特殊文字としてではなくプレーンテキストとして扱われることです。
IQAndreas 14年

あなたが実際にUbuntu上にあるリンクされたファイルの著作権の見出しから私は見るので、答えに関連するのでそれぞれのタグを追加します(使用されたシェルに関しては私の答えを見てください)。
フォルカーシーゲル14年

回答:


11

Ubuntuを使用していると仮定します。Ubuntuはダッシュを使用してシステムスクリプトを実行します。

このファイルは/etc/update-motd.d/00-header、によって実行されます/bin/dash(ではなく/bin/bash)、これはかなり最小限の(そして高速な)です- この場所で
"\ e"をサポートしていないようです- 代わりに"\ 033"を使用してください。

エスケープコードを展開するタイミングが異なります。


3

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色のmotd

好みに応じて、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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.