Це питання мене турбує вже кілька днів, і ось моя відредагована публікація з усім вивченим матеріалом. Зокрема, моя мета полягала в тому, щоб домогтися показу годинника поруч із підказкою в BASH. Так само, як згадував Раду Радеану у своїй відповіді, головне - знайти функцію або змінну, яка здатна постійно оновлювати командний рядок або перемальовувати екран, не втручаючись у ваш екран або з тим, що ви вводите. Хоча цього можна досягти за допомогою циклу while, як показано G_P, постійне перемальовування екрана за допомогою функції tput змішується з будь-яким текстом на моєму екрані в той момент, коли він оновлюється. Я підійшов досить близько до досягнення того, що запитував ОП, змінивши дещо змінений код G_P, але все ж я вважаю, що відповідь Раду є найближчим до того, чого хоче ОП. Без зайвої приналежності, ось деякі речі, які я '
№1, Моє бажане рішення: Термінальний мультиплексор
Термінальний мультиплексор - це програмне забезпечення, яке дозволяє розділити екран терміналу на два або більше екранів. Зокрема, хочу звернути увагу на термінал Byobu. Цей емулятор терміналу на основі ncurses дозволяє показувати час, відсоток процесора, пам'ять та цілу купу інших показників. На скріншоті з мого терміналу byobu ви бачите температуру процесора, відсоток заряду акумулятора, якість підключення до Інтернету, частоту процесора, оперативну пам’ять, дату і звичайно час. Якщо ви в основному переймаєтесь постійним моніторингом цих речей, перебуваючи в терміналі, Byobu - це шлях. Насправді мені так подобається, я налаштував його автоматично завантажуватись під час входу в tty. Єдина хитрість полягає в тому, що в tty фактично ви не можете об'єднати окремі вікна - перемикатися між вкладками лише клавішами F3 та F4
Альтернативне рішення, що включає вікна мультиплексування, - це використання splitvt
, яке розбиває екран на дві частини. Ви можете запустити термінальний годинник, наприклад tty-clock
, скористатися командою watch з датою, або ви можете кодувати його за допомогою сценарію. Детальніше про це пізніше. На скріншоті ви бачите одну частину розбиття з звичайним баш-підказкою вгорі, а в нижній - сценарій, що працює, який постійно оновлює вихід date
команди з clear
командою.
# 2, Хоча робити цикл і тпут.
Це, мабуть, те, що людина, яка задала питання, хотіла реалізувати з bash.
G_P опублікував чудове рішення, що включає команди while do
та tput
команди. Однак у коді G_P було дві речі, які мені не сподобалися. Один, годинник знаходився праворуч від підказки, і два - оскільки цикл сну становить 1 секунду (див. Первинний код, де написано сон), екран переробляється щосекунди, і це псує мій вихід. Що я зробив, - це відредагувати баш-запит на один рядок нижче за допомогою оператора \ n та змінити код G_P, щоб оператор tput розмістив годинник прямо над підказкою та оновив кожні 60 секунд; це дозволяє мені бачити години і хвилини (і мене точно не хвилюють хвилини), тоді як петля годинника не псує мій екран. По-перше, ось мій підказки:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
А ось модифікований код G_P: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
Невелике редагування : я помітив, що цей код вище не часом відображає годинник. Ось краща версія: while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
Цей кладе годинник спочатку на екран, а потім дає зрозуміти, щоб пройти цикл сну 60 секунд
Зауважте, чашка tput 0 0 розміщує годинник у верхньому правому куті екрана, праворуч над моїм підказкою і сплячим режимом 60 змінює цикл сну на 60 секунд, тому що я можу спостерігати лише години та хвилини замість кожної секунди. Таким чином, на будь-який текст, який я маю на екрані, здебільшого не впливає (лише тоді, коли я запускаю команду в той же час, оновлюється годинник).
Рядок PS1 вже є у вашому профілі .bashrc, тому вам просто потрібно його трохи підправити. Цикл while do слід додати десь у тому самому файлі, бажано врешті з # коментарем, що це матеріал, який ви додали спочатку. І не забувайте завжди створювати резервну копію будь-якого такого файлу на всякий випадок, якщо ви створюєте бульбу і вам потрібно повернутися до того, яким він був.
№3, Сценарій та ін
Ця частина лише для тих, хто хоче побачити час. Для тих, хто хоче постійно стежити за цим, №1 та №2 є кращими варіантами.
Тому, як ми вже бачили цикл do do, це дуже корисно. Ось як можна створити годинник за допомогою команд циклу циклів, дати та сну.
Натисніть кнопку return / enter, і ви в основному побачите вихідну команду дати, яка відображається на очищеному екрані щосекунди. Якщо ви не хочете кожен раз вводити це, перетворіть усі ці речі на сценарій:
#!/bin/bash
while true
do
clear;date
sleep 1
done
Тепер ви можете запустити цей скрипт зі splitvt в одному екземплярі bash, працюючи в іншому.
Ще одне рішення - watch -n1 date
команда, яка буде постійно виконувати команду дати з періодом 1 секунди.
На закінчення : я дізнався деякі речі, намагаючись знайти відповідь на це питання, і я сподіваюся, що мої висновки допомогли вам певним чином, і я сподіваюся, що я зміг зробити свій внесок у це питання. Термінал Byobu IMHO - найкраще рішення, але вирішіть самі, зробіть кілька досліджень та виберіть той спосіб, який найкраще підійде для вас.
Деякі речі, які я знайшов під час дослідження:
Моя оригінальна публікація, мінімалістичне рішення: Відредагуйте файл ~ / .bashrc. Я вважаю за краще редагувати його нано, так
nano ~/.bashrc
Ось частина мого власного відредагованого файлу:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
Після іншої заяви перший рядок коментується # (це моя стара підказка), тепер другий рядок - той, який ви хочете, а конкретно \t
оператор. Це показує час роботи у форматі 24 години. Для отримання додаткової інформації перевірте це . Також невеличка примітка, я використовую речі після іншого, тому що я не використовую кольоровий рядок.
PS: Будь ласка, дайте мені знати, чи повинен я щось додати до своєї відповіді чи будь-яким чином відредагувати її, але здебільшого я вважаю, що це найбільш переконлива відповідь, яку я міг би придумати, і принаймні я особисто нічого не додаю. нова для нього.
$PS1
змінну (підказка), щоб мати час, але я не впевнений, що зміни.