Как использовать цвета в 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

Как я могу добавить всплеск цвета к сообщению дня?

IQAndreas
источник
Как вы редактировали файл, особенно непечатаемые символы?
Фолькер Сигел
В picoя заменил существующую строку коды с первой строкой O кода , который я включил в моем примере. Проблема заключается в том, что анализатор MOTD обрабатывает \eи последующие символы как обычный текст, а не как специальные символы.
IQAndreas
Из заголовка авторского права связанного файла я вижу, что вы действительно в Ubuntu, поэтому я добавляю соответствующий тег, так как он имеет отношение к ответу (относительно используемой оболочки, см. Мой ответ).
Фолькер Сигел

Ответы:

11

Предполагая, что вы находитесь в Ubuntu - который использует dash для запуска системных скриптов:

Этот файл, /etc/update-motd.d/00-headerвыполняется /bin/dash(не /bin/bash), который является довольно минималистичным (и быстрым) -
кажется, он не поддерживает «\ e» в этом месте - вместо этого используйте «\ 033» .

Разница в том, когда расширять escape-коды.

Volker Siegel
источник
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
Tombart
источник