Этот вопрос беспокоил меня в течение нескольких дней, и вот мое отредактированное сообщение со всем материалом, который я изучил. В частности, моей целью было добиться показа часов рядом с подсказкой в BASH. Точно так же, как Раду Радеану упомянул в своем ответе, ключ в том, чтобы найти функцию или переменную, которая способна постоянно обновлять командную строку или перерисовывать экран, не мешая вашему экрану или тому, что вы печатаете. В то время как этого можно добиться с помощью цикла while, как показывает G_P, постоянное перерисовывание экрана с помощью функции tput портится с любым текстом на моем экране в момент его обновления. Я довольно близко подошел к достижению того, что попросил ОП, немного изменив код, опубликованный G_P, но все же я считаю, что ответ Раду наиболее близок к тому, что хочет ОП. Без дальнейших церемоний, вот некоторые из вещей, которые я
# 1, Мое предпочтительное решение: терминальный мультиплексор
Терминальный мультиплексор - это программное обеспечение, которое позволяет разделить экран терминала на два или более экрана. В частности, хочу обратить внимание на терминал Бёбу. Этот эмулятор терминала на основе ncurses позволяет отображать время, процент процессора, память и целый ряд других индикаторов. На скриншоте с моего терминала byobu вы можете видеть температуру процессора, процент батареи, качество интернет-соединения, частоту процессора, оперативную память, дату и, конечно же, время. Если вы в основном заинтересованы в постоянном наблюдении за этими вещами, находясь в терминале, Byobu - это то, что вам нужно. На самом деле, мне так понравилось, что я настроил автоматическую загрузку при входе в tty. Единственная странность в том, что в tty вы фактически не можете объединить отдельные окна - переключайтесь между вкладками только с помощью клавиш F3 и F4.
Альтернативное решение, включающее мультиплексирование окон, - использование splitvt
, которое разделяет экран на две части. Вы можете запустить часы терминала, например tty-clock
, использовать команду watch с датой, или вы можете сами написать код с помощью скрипта. Подробнее об этом позже. На скриншоте вы можете увидеть одну часть разделения с обычной подсказкой bash сверху, а на нижней вы видите запущенный скрипт, который просто постоянно обновляет вывод date
команды с помощью clear
команды.
# 2, Пока Do Loop и tput
Это, вероятно, близко к тому, что человек, который задал вопрос, хотел реализовать с помощью bash.
G_p опубликовал большое решение , вовлекающее while do
и tput
команду. Однако в коде G_P были две вещи, которые мне не нравились. Во-первых, часы были справа от приглашения, а во-вторых, поскольку цикл ожидания равен 1 секунде (обратитесь к исходному коду, в котором написано «спать»), экран перерисовывается каждую секунду, и это портит мой вывод. Что я сделал, так это отредактировал мое приглашение bash на одну строку ниже с помощью оператора \ 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 &
эти часы сначала помещают часы на экран, а затем сообщают, что bash проходит цикл сна продолжительностью 60 секунд.
Обратите внимание, что tput cup 0 0 помещает часы в верхний правый угол экрана, прямо над моей подсказкой, и режим сна 60 меняет цикл сна на 60 секунд, потому что таким образом я могу отслеживать только часы и минуты, а не каждую секунду. Таким образом, какой бы текст на экране ни отображался, по большей части это не влияет (только когда я запускаю команду, обновляются часы).
Линия PS1 уже есть в вашем профиле .bashrc, так что вам просто нужно немного ее настроить. Цикл while do должен быть добавлен где-то в тот же файл, желательно в конце с комментарием #, что это то, что вы добавили изначально. И не забывайте всегда делать резервные копии любого файла на тот случай, если вы создадите bubu и вам нужно вернуться к тому, что было.
№ 3, Сценарии и другое
Эта часть только для тех, кто хочет видеть время. Для тех, кто хочет постоянно следить за ним, # 1 и # 2 являются предпочтительными вариантами.
Итак, как мы уже видели, цикл while do довольно полезен. Вот как вы можете создать часы с помощью команд while, loop, date и sleep.
Нажмите return / enter, и вы в основном будете видеть вывод команды date, отображаемой на очищенном экране каждую секунду. Если вы не хотите вводить все это каждый раз, включите все это в скрипт:
#!/bin/bash
while true
do
clear;date
sleep 1
done
Теперь вы можете запустить этот скрипт с splitvt в одном экземпляре bash, а работать в другом.
Другим решением является watch -n1 date
команда, которая будет непрерывно выполнять команду даты с периодом 1 секунда.
В заключение: я узнал некоторые вещи, пытаясь найти ответ на этот вопрос, и я надеюсь, что мои выводы каким-то образом помогли вам, и я надеюсь, что смог внести свой вклад в этот вопрос. Терминал Бёбу ИМХО - лучшее решение, но решите сами, проведите исследование и выберите тот способ, который вам больше подходит.
Некоторые из вещей, которые я нашел во время исследования:
Мой оригинальный пост, минималистичное решение: отредактируйте файл ~ / .bashrc. Я предпочитаю редактировать его с помощью nano, поэтому
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
После оператора else первая строка закомментирована с # (это мое старое приглашение), теперь вторая строка - это та, которую вы хотите, и, в частности, \t
оператор. Это показывает время работы в 24-часовом формате. Для получения дополнительной информации проверьте это . Также небольшая заметка, я использую материал за другим, потому что я не использую цветную подсказку.
PS: Пожалуйста, дайте мне знать, если я добавлю что-нибудь к своему ответу или отредактирую его каким-либо образом, но по большей части я считаю, что это самый убедительный ответ, который я мог бы придумать, и, по крайней мере, я лично не буду ничего добавлять новичок в этом.
$PS1
переменную (prompt), чтобы иметь время, но я не уверен, что изменения.