Раньше я работал в компании, у которой была настраиваемая оболочка для управления одним из своих продуктов, работающим в 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", который устанавливает новую прокручиваемую область. Таким образом, при чтении каждой строки файла журнала нижняя строка в окне исключается из прокручиваемой области, вставляется строка из файла журнала, а затем снова добавляется нижняя часть.