Як використовувати кольори в 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

Як можна додати сплеск кольору до повідомлення дня?


Як ви редагували файл, особливо символи, що не друкуються?
Volker Siegel

В picoя замінив існуючий рядок коди з першим рядком O коду , який я включив в моєму прикладі. Проблема полягає в тому, що парсер MOTD потім розглядає \eнаступні символи як звичайний текст, а не як спеціальні символи.
IQAndreas

Я бачу з керівника авторських прав пов’язаного файлу, який ви перебуваєте на Ubuntu, тому я додаю відповідний тег, оскільки це стосується відповідей (щодо оболонки, що використовується, див. Мою відповідь).
Волкер Зігель

Відповіді:


11

Якщо припустити, що ви перебуваєте на Ubuntu - який використовує тире для запуску системних скриптів:

Цей файл, /etc/update-motd.d/00-headerвиконується /bin/dash, (не /bin/bash), який є досить мінімалістичним (і швидким) -
він, здається, не підтримує "\ e" в цьому місці - використовуйте натомість "\ 033" .

Різно в тому, коли слід розширювати коди евакуації.


4

У 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 кольоровий мод

Залежно від вашого смаку, ви можете отримати більш кольоровий вихід, використовуючи 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.