Intereting Posts
Пользователь Admin не показывает путь к папке в консольной строке, только $ Как установить Gentoo с VirtualBox и использовать его как родную ОС позже? Как проверить, работает ли Chromium внутри песочницы Как узнать, какие обновления pacman являются основными? Как использовать sox или ffmpeg для определения интервалов молчания в длинном звуковом файле и их замены нулями (например, подавление фонового шума)? Изменение хэширования пароля на PBKDF2 в операционной системе на базе Debian В чем разница между BAT0 и ADP0 на ядре linux? Как я могу запретить Windows переписывать GRUB при использовании устройства с двойной загрузкой Нет терминала в новом Linux Mint 18.1 Cinnamon (64-bit) Удаленная мышь netcat (/ dev / input / mice) Изменить временную метку файла и время показа вместо года с помощью ls Как удалить каталоги на основе вывода `find`? Как я могу использовать установленный раздел / диск Arch как физический диск VMWare на виртуальной машине? Текст трубы внутри и вне сервера Netcat Использование mkfifo ssed -R по сравнению с perl -pe

Очистите экран и покажите баннер

Мне нужен текстовый баннер на экране, который проецируется все время. Экран подключен к ПК с tmux на нем.

Пример текстовых «баннеров»:

figlet $(fortune) 

или

 toilet "$(cowsay $(fortune))" 

Вы поняли эту идею.

Первоначально мы думали, что для этого значка нужны «возможности восстановления», если что-то пошло не так, поэтому мы сделали что-то вроде этого:

 watch --interval 1 --no-title echo Paranoid about crashes, but I should not be 

но вещь никогда не разбивалась через год! ( uptime > 1 год)

Поэтому мы упрощаем и развертываем в другом месте. Я просто хочу, чтобы команда UNIX выполняла следующие действия:

  • очистить экран (например, clear )
  • показывает форматированную строку (например, printf )
  • является модальным (например, приложение ncurses )

Я начал писать что-то вроде этого, ущипнул веб-учебник:

 #include <ncurses.h> int main(int argc, char** argv) { char* greeting = "Hello, world!"; initscr(); addstr(greeting); refresh(); getch(); endwin(); return 0; } 

но это не «модальный» (с модальным бытием: игнорировать все входные данные до CTRL + C), и я могу «переписать существующий инструмент».

Какой инструмент UNIX вы бы использовали в моем случае?

Команда для наблюдения за Ctrl + C (сигнал INT) является trap .

 #!bin/bash MSG="Hello, world!" trap "clear; echo -e $MSG" SIGINT SIGTERM while : do sleep 60 done 

Обновление – Другие сигналы, которые могут быть пойманы с помощью ловушки

SIGINT – Ctrl-c
SIGQUIT – Ctrl- \ (это выйдет из программы, но команды в ловушке все равно будут выполнены)

SIGSTOP (Ctrl-z), похоже, не попадает в ловушку.

trap также может поймать сигналы, выданные kill , но я не уверен, сколько их можно поймать.

trap также поддерживает некоторые другие специальные имена: –
EXIT , DEBUG , RETURN и ERR .
Дальнейшую документацию по ним можно найти в справочном руководстве по bash .

Если я понимаю, вам нужен бесконечный цикл:

 while :; do sleep 1 clear # the command: echo, toilet, etc. done 

Возможно, проблема с часами заключается в том, что расширение оболочки $(command ..) выполняется один раз до того, как вызывается так, что вывод не изменяется; сменить двойные кавычки на одинарные кавычки

 watch --interval 1 'cowsay $(fortune)'