当我在 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"'
感谢提供线索
答案1
我知道的唯一方法是后台进程。您可以使用 .bash_profile 或类似程序自动启动它(但您可能想检查您是否在 xterm 中,而且这会导致加载,因为每个窗口都会显示它),或者在您登录时手动启动它一次。
因此,例如使用上面的代码,在 PATH 中创建一个名为 printload 的文件,并将其设置为 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 即可:
printload &
当然,您可以将其放入脚本中以便自动或手动调用。
** 注意:没有测试语法,但理论上应该可行 **
答案2
这是我最终做的事情,使用@Dave C 的后台任务方法,在远程服务器上有 2 个可执行 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 进入目标远程机器,并附加登录时运行的命令,如下所示:
alias goapache='ssh -i ${key} 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 秒的可用内存和平均负载。
确实有效,在终端标题栏中看到服务器状态很不错,更不用说更容易区分本地终端和远程终端。