
Я редактировалпо умолчанию/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
с использованием этой информации, то получаю распечатку escape-кодов в виде открытого текста:
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
,) который довольно минималистичный (и быстрый) -
похоже, он не поддерживает"\е"в этом месте - используйте"\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 / Убунту 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 / Убунту 14.04
Динамическая часть обновляется с помощью /etc/init.d/motd start
, который выполняет следующее:
uname -snrvm > /var/run/motd.dynamic
решение3
Вставьте <ESC>
escape-символ ANSI перед кодом цвета. Если вы используете Vim, это будет нажатие Ctrl+K ESC
или Ctrl+v+[
в режиме редактирования.
^[
Затем напишите нужный вам цветовой код. Например, пусть это будет красный передний план[31m
^[[31mHello! Glad to see you again^[[0m
В начале ^[
должно быть указано, что есть экранированный символ, а [31m
настоящие символы набраны вручную.