linux shell中的状态行

Ale*_*lex 5 linux display bash shell statusbar

我使用 Windows 和 Putty 来远程连接(ssh)到一些 linux 服务器。我已经在我的 .screenrc 文件中设置了我的 hardstatus,以便我可以监控一些有用的信息。但这仅在我在屏幕中时才有效。

我想在 Screen 之外使用同样的东西。所以,基本上,当我在屏幕外的 bash shell 上时,我想要一个状态栏(类似于 Screen 的状态栏)。

这甚至可能吗?我该怎么做?如果没有,有什么替代方法吗?

PS:我的目标是在状态栏中显示更新我对服务器的访问权限的当前时间和截止日期。

Edw*_*ard 3

很酷的问题。据我所知,正如 David Postill 所说,仅靠 Bash 无法完成此任务。但正如他所建议的,您可以(滥用)使用提示来达到此目的。下面是一个使用ANSI 转义序列来实现状态栏效果的示例:-)

PS1='\[\e[s\e[1;1H\e[41;1m\e[K\e[33;1m\][ *** \t *** ]\[\e[0m\e[u\]\w> '
Run Code Online (Sandbox Code Playgroud)

这个只是在“状态栏”上显示当前时间,同时还显示常规提示。一些注意事项:

  • \e[介绍了大部分特殊命令
  • \e[s保存当前光标位置
  • \e[1;1H将光标定位在第 1 行、第 1 列
  • \e[...m更改(前景色和背景色)颜色
  • \e[K清除到行尾
  • \e[u恢复光标位置
  • \[\]在提示中分隔不可打印的字符;他们让 Bash 计算提示的精确长度。原则上您可以不使用这些,但随后提示将无法在多行命令中正确更新(但请参阅下面的缺点)

我并不是建议您认真对待这个解决方案。它有严重的缺点:

  1. 难以阅读且脆弱
  2. 状态栏仅在提示更新时更新;即,当控制权返回到 shell 时(正如我读到你的问题,这是一个很大的缺点)
  3. 多行命令显示不正确(光标在第一行重新启动)

但是,我仍然希望您喜欢!:)