如何强制 PS1 评估以便我可以使用终端标题作为状态栏?

如何强制 PS1 评估以便我可以使用终端标题作为状态栏?

我想使用 set-title 函数https://askubuntu.com/a/774543/435408将终端标题变成一种状态栏。这样我就可以在 GUI 中看到我的服务器是正在运行还是已完成。

set-title Running && doStuff.sh && set-title Complete

使用此代码,您永远不会看到标题更改为“正在运行”,而只会看到“完成”。我相信这是因为只有在所有三个命令运行后,系统读取 PS1 以创建新提示时,标题才会更改。

我通过将其他命令放在后台来立即显示“正在运行”:

doStuff.sh && set-title Complete & set-title Running; fg

但是终端标题从未设置为“完成”,因为该调用是在后台进行的。“fg”没有帮助。

我遇到了类似的问题

set-title Running; echo "doStuff.sh; set-title Complete" | at now + 0 minutes

最后,我尝试打开一个名为“正在运行”的新终端选项卡,如下所述https://askubuntu.com/a/860484/435408,但我无法向 bash 会话传递任何命令以将其标题设置为“完成”。如果我尝试使用 --rcfile 或 -c,该选项卡会立即关闭。

gnome-terminal --tab -e "bash -c 'printf \"\033]0;Running\007\"; sleep 4; exec bash'"

答案1

我得到了我想要的行为:

  1. 用于gnome-terminal创建一个带有“正在运行”标题的窗口
  2. 执行后通过调用保持窗口打开exec bash
  3. ~/.statusrc将对“set-title Complete”的调用放入我传递给新 bash 的文件中。
gnome-terminal --maximize --title="Running" -- /usr/bin/bash -c \
". /home/user/.bashrc; doStuff.sh; exec bash --rcfile /home/user/.statusrc"

~/.statusrc 文件如下所示:

#!/usr/bin/bash

. ~/.bashrc
termtitle "Complete"

相关内容