Назад | Перейти на главную страницу

Подсказка Bash под выходом - Хвост фонового журнала

Раньше я работал в компании, у которой была настраиваемая оболочка для управления одним из своих продуктов, работающим в Linux, и я хочу воспроизвести ключевую функцию этой оболочки.

Вся работа выполнялась в фоновом режиме, а вывод журнала отображался для всех подключенных пользователей.

Журнал будет идти в фоновом режиме к вашей оболочке, а строка подсказки всегда будет идеально внизу.

Например,

Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #

То, как я пытался сделать это с помощью bash, заключалось в том, чтобы запустить отдельный хвост в файле .bashrc пользователей, но когда вывод команды отправляется в stdout - он входит в приглашение bash, например

![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3

И пользователю нужно будет нажать ввод или CtrlC для чистой строки подсказки.

У меня нет идей о том, как сделать так, чтобы приглашение всегда переходило в конец вывода, и я думаю, что использую неправильную терминологию, чтобы найти что-либо в Google, поскольку мне не повезло - кто-нибудь знает, как это сделать с башом?

Ответ: используется экран или tmux

Я объясню, как можно настроить такое с помощью экрана

1) Установите экран, используя либо apt-get install screen в Ubuntu / Debian или yum install screen RedHat - производные.

2) screen -S shell_and_logs

3) Затем нажмите Ctrl+а, с последующим S (заглавная S).
Появится горизонтальный экран

4) Нажмите Ctrl+а с последующим TAB
Это перейдет ко второму разделенному окну.

5) Создайте здесь еще одно окно, чтобы получить командную строку, нажав Ctrl+а отпустите клавиши, затем нажмите c

6) Вы можете изменить размер второго винда, нажав Ctrl+а затем набрав :resize после которого Lines: будет появляться. Введите количество строк, которые вы хотите показать.

7) Наконец, вы можете переключаться между окнами с помощью Ctrl+а с последующим TAB

Следующее делает то, что вам нужно, без использования tmux, screen или других программ. Сохраняет подсказку внизу. Замените "/ var / log / cron" любым нужным файлом:

#!/bin/bash 
L=$(tput lines)
L1=${L}
(( L1-- ))
C=$(tput cols)
tput cup ${L} 0
tail -f /var/log/cron | while read line; do 
  tput sc
  printf "\e[1;${L1}r\e[${L1};${C}f" 
  echo; echo ${line}
  printf "\e[1;${L}r" && tput rc
done

ключом к этому являются управляющие символы ANSI для терминала. В частности, оператор "\ e [x; y", который устанавливает новую прокручиваемую область. Таким образом, при чтении каждой строки файла журнала нижняя строка в окне исключается из прокручиваемой области, вставляется строка из файла журнала, а затем снова добавляется нижняя часть.