Когда у меня в WM открыто несколько терминалов, было бы неплохо, если бы заголовки окон терминалов отражали текущего пользователя и хоста (легко), а также динамическую информацию о загрузке сервера, обновляемую через некоторый промежуток времени (сложнее).

Используя PROMPT_COMMAND, я могу получить нужные данные в заголовке окна терминала; однако, это требует, чтобы я что-то делал (например, менял каталоги), чтобы заголовок окна обновлялся самой последней информацией. В идеале, как и многие, я бы предпочел ничего не делать.

Итак, есть ли какая-то магия заданного интервала времени ожидания, которую я могу применить, чтобы динамически обновлять заголовок окна без вмешательства пользователя?

function curr_load {
  # interval wrapper here, or somewhere at any rate ;-)
  uptime
}
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME} [`curr_load`]\007"'

Спасибо за подсказки

2 ответа2

2

Единственный способ, которым я знаю, - это фоновый процесс. Вы можете либо запустить это автоматически с помощью .bash_profile или аналогичным (но вы, вероятно, захотите проверить, были ли вы в xterm, а также это вызовет загрузку, поскольку это будет отображаться в каждом окне), или запустить его один раз вручную при входе в систему.

Например, используя приведенный выше код, создайте в PATH файл с именем printload set для exec, содержащий:

#!/bin/bash
function curr_load {
  # interval wrapper here, or somewhere at any rate ;-)
  uptime
}
while true; 
do 
   echo -ne "\033]0;${USER}@${HOSTNAME} [`curr_load`]\007"
   sleep 3
done

А затем просто начните печатать с:

printload &

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

** ПРИМЕЧАНИЕ: не проверено на синтаксис, но должно работать теоретически **

0

Вот что я сделал, используя метод фоновой задачи @Dave C с двумя исполняемыми сценариями bash на удаленном сервере: term-status и term-status-run.

#!/bin/bash
function curr_load { cat /proc/loadavg | awk '{print $1 " " $2 " " $3}' }
function mem_free {
  cat /proc/meminfo | grep MemFree|awk '{print sprintf("%.0f", $2/1024)" MB"}'    
}
while true; 
do
  echo -ne "\033]0;${USER}@${HOSTNAME} `mem_free` [`curr_load`]\007"
  sleep 5
done

******
#!/bin/bash
~/scripts/./term-status &

Имея файлы на удаленном сервере, я изменяю существующие псевдонимы bash для ssh на целевые удаленные машины, добавляя команду для запуска при входе в систему следующим образом:
псевдоним goapache = 'ssh -i $ {ключ} user @ some-ip -t ~/scripts/./term-status-run; bash --login '

В моем оконном менеджере Linux (i3) стековые терминалы, подключенные к удаленному серверу, теперь имеют следующие заголовки:

foo@serv1 226MB [0.43 0.50 0.35]
bar@serv2 332MB [0.23 0.38 0.27]
baz@serv3 295MB [0.15 0.22 0.26]

отражая свободную память и средние нагрузки с 5-секундными интервалами.

Делает хитрость, вроде приятно видеть состояние сервера в строке заголовка терминала, не говоря уже о том, что гораздо проще отличить локальные терминалы от удаленных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .