Когда я работаю в linux терминале, то замечаю, что часто набираю date просто, чтобы посмотреть время. Поэтому чтобы сделать жизнь немного проще, я написал скрипт, который всегда показывает часы в правом верхнем углу экрана.

Скрипт сохраняет текущее положение курсора в управляющей ANSI последовательности. После, используя команду tput, курсор отправляется на строку 0 (в верхней части экрана) и последний столбец минус 19 символов (19 это длина HH: MM: SS YYYY-MM-DD). Отформатированная комманда date отображается в инвертированном зеленом цвете. Курсор затем отправляется в первоночальное положение с использованием другой ESC-последовательности.

Если Вы пользуетесь терминалом в X Window, то можете изменять размеры окна и часы будут сохранять свою позицию, поскольку она отображается в последней колонке минус 19 символов. Управляющие ANSI последовательности не работают во всех эмуляторах терминалов, но они хорошо работают в xterm (странно, но я проверил к console и Yakuake, скрипт прекрасно работает — прим. перев.). Вот скрипт:

#!/bin/bash
# clock.sh 

# the script is executed inside a while without conditions
while :
do
 # time and date are formatted to show HH:MM:SS YYYY-MM-DD
 cmd=`date +"%H:%M:%S %F"` 

 # cursor's current position is saved through an escape sequence
 echo -n -e "33[s" 

 # Uncomment the next two lines to clean up the whole first line, although it causes a lot of blinking
 #tput cup 0 0    # positions on row 0 col 0 (left top corner)
 #tput el         # cleans from position to end of line 

 # to place the clock on the appropriate column, subtract the length of 'HH:MM:SS YYYY-MM-DD', which is 19,
 # from the total number of columns
 C=$((`tput cols` - 19))
 tput cup 0 $C    # positions cursor at row 0 col $C 

 # clock will be shown green inverted
 # setaf 2 = green, smso = inverted
 COLOR=`tput setaf 2; tput smso` 

 # back to normal screen colors
 NORMAL=`tput sgr0` 

 # print the time-date output on the above position
 echo -n $COLOR$cmd$NORMAL 

 # restore the cursor to whatever was its previous position
 echo -n -e "33[u" 

 # script is executed every second
 sleep 1
done

Сохраните скрипт как clock.sh, chmod — 755, и запустите его ./clock.sh&. Время и дата теперь должны отобразиться в верхнем правом углу вашего окна терминала.

Когда Вы запустите clock.sh, терминал вернет номер задачи и идентификатор процесса (PID), с помощь которого Вы можете завершить работу скрипта командой kill.

С помощью этого скрипта Вы можете отобразить не только часы, но и любую другую информацию какую захотите. Для примера, предположим, что мы хотим наблюдать за нагрузкой процессора командой uptime:

uptime
09:19:56 up 1 day,  1:54,  4 users,  load average: 0.29, 0.39, 0.42

Три последних значения и есть загрузка процессора за последнюю минуту, пять и 15 минут. Вы можете извлечь эту информацию используя команду gawk.

uptime | gawk '{print $(NF - 2), $(NF - 1), $NF}'
0.72, 0.54, 0.47

NF это общее количество полей в выводе команды, а $NF — значение последнего поля. В clock.sh замените эту строчку:

cmd=`date +»%H:%M:%S %F»`

на такую:

cmd=`uptime | gawk ‘{print $(NF — 2), $(NF — 1), $NF}’`

или такую, чтобы оставить время и дату:

cmd=`date +»%H:%M:%S %F» ; uptime | gawk ‘{print $(NF — 2), $(NF — 1), $NF}’`

Поскольку длина строки уже не 19, пусть команда wc поможет нам определить отступ. Измените строчку:

C=$((`tput cols` — 19))

на такую:

C=$((`tput cols` — (`echo $cmd | wc -c` — 1) ))

Длина вывода вычисляется с помощью wc -c (-с считает символы в строке, которые были ей перенаправлены). -l отсекает \r в конце вывода $cmd.

Вы также можете отобразить свободное место на определенном разделе командой df, количество пользователей в системе (uptime или w) или количество процессов (ps). Samba, Apache и многие другие серверные приложения имеют статус-команды из которых можно «вытащить» нужную информацию. Используйте свое воображение, чтобы создать собственную модифицированную версию clock.sh.

Источник: CLI Magic: Use ANSI escape sequences to display a clock in your terminal
Перевод: loki. Пожайлуста, оставляйте ссылку на источник и перевод при копировании данного текста.