shell中如何设置自定义终端标题栏的内容?

shell中终端标题设置的背景知识

在Linux或Unix的Shell中,可以使用PS1环境变量来设置终端的提示符,包括终端标题栏。具体来说,可以在PS1?字符串中使用\[\e]0;Title\]?转义序列来设置终端标题。其中,Title?是终端窗口的新标题,可以是任何文本字符串。

以下是一个示例,演示如何在Bash Shell中设置终端标题:

PS1='\[\e]0;My Terminal\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' 

在运行此命令后,终端窗口的标题将更改为"My Terminal"。在这个示例中,我们将\[\e]0;My Terminal\]?添加到了PS1?变量的开头,这样就可以在终端标题栏中设置一个新的标题。

请注意,这种方法可以与大多数Shell和终端仿真器一起使用,但是可能会有一些特殊的终端类型不支持此ANSI转义序列。同时,如果在PS1?字符串中使用了其他转义序列,可能需要特殊的转义符号来避免终端混淆。

更进一步:兼容性考虑

如果你使用支持xterm兼容的转义序列的终端,并且只想设置一次标题,你可以使用像这样的函数:

settitle() { printf '\e]2;%s\a' "$*"; }

如果你想每次输入命令时将标题栏设置为当前运行的命令行,那么以下解决方案可以实现类似的效果:

trap 'printf "\e]2;%s\a" "$(HISTTIMEFORMAT= history 1)" >/dev/tty' DEBUG

然而,它会保留命令历史编号,并且不会在显式的子shell(例如(cd foo && make))中触发。

或者仅使用当前简单命令的名称和参数:

trap 'printf "\e]2;%s\a" "$BASH_COMMAND" >/dev/tty' DEBUG

对于遵循Posix标准但不识别'\e'作为Escape字符序列的Shell,可以用'\033'替代。


如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。

版权声明:

作者: freeclashnode

链接: https://www.freeclashnode.com/news/article-446.htm

来源: FreeClashNode

文章版权归作者所有,未经允许请勿转载。

免费节点实时更新

热门文章

最新文章

归档