在 Unix shell 提示符中填充有用的信息是很常见的,但我有太多想要关注的东西,无法将其全部放入一个提示符中:当前 Gnu 屏幕窗口、当前目录、当前时间、主机名、当前 git 分支,月相,你能想到的。
拥有一个会更理智固定状态地区在终端底部(或顶部)显示所有这些信息,并保留提示。 (我写了“固定状态区域”而不是“固定状态行”,因为我不想将自己限制在一行。)
(当然,该区域不会受到正常交互输出的影响。)
是否有一个标准的 Unix 来实现这样一个固定状态区域,并允许我通过该precmd
函数更新它?
答案1
您可以水平分割屏幕screen
,将一个区域设置为您想要的大小状态区,并在其中运行一些内容watch -t cat ~/.status
,然后将其内容填充~/.status
到您的precmd()
.
答案2
如果您的终端支持终端寻址、保存光标和恢复光标,这可能会起作用:
PS1="$(tput sc;tput cup 0 0;tput rev;tput el)\u@\h \W$( tput rc;tput sgr0)\$ "
但请注意,该命令可能很难编辑,因为 shell 会对它在输入缓冲区中的位置感到困惑。
在中bash
,您可以使用反斜杠方括号告诉它忽略光标控制序列:
PS1="\[$(tput sc;tput cup 0 0;tput rev;tput el)\]\u@\h \W\[$( tput rc;tput sgr0)\]\$ "
如果这不起作用,请尝试将输出直接发送到终端:
TOSL=$(tput sc;tput cup 0 0;tput rev;tput el)
FROMSL=$(tput sgr0; tput rc)
PS1='$(echo -n "$TOSL $LOGNAME@$HOSTNAME ${PWD/#$HOME/~}$FROMSL">/dev/tty)\$ '
答案3
今年 [2023],即你提出问题十年后,有一天我感到无聊,写了一篇名为“Basta”(Bash 状态行)的小东西。
https://www.kylheku.com/cgit/basta/about/
它是您从~/.bashrc
文件中获取的小脚本,它在屏幕底部为您提供受保护的状态行,显示日期、时间、主机和工作目录(如果需要,可以缩写以适应)。
当 Bash 等待输入时,时间会更新!
答案4
AT&T Unix 有sysline
命令,它为硬件中没有命令的终端提供状态行。也许现在已经有一个 GNU 等价的东西了......