我找到了这个脚本来更改我当前的终端选项卡标题:
#!/usr/bin/env bash
T=$1
ORIG=$PS1
TITLE="\e]2;$T\a"
PS1=${ORIG}${TITLE}
echo "Terminal tab title changed to $T"
Run Code Online (Sandbox Code Playgroud)
如果我直接在终端中输入它们(TITLE="\e]2;HELLO\a"
例如),效果很好
但是在 shell 脚本 (rename.sh) 中 $PS1 是空的并且脚本不起作用。
rename.sh HELLO 输出"Terminal tab title changed to HELLO"
但终端标题没有改变。脚本中的 $PS1 是空的。
有人可以帮助我理解这一点吗?
tri*_*eee 10
该脚本通过将 shell 的交互式提示设置为一个字符串来工作,该字符串包含用于操作xterm
窗口标题的控制代码。每次显示shell 的提示时,都会输出更改窗口标题的控制代码。
但是,当然,在脚本内部,不会显示交互式提示,因此这些命令没有可观察到的效果(尽管如果您从脚本内部启动另一个交互式 shell,您可以看到窗口标题发生变化)。并且因为没有脚本可以改变其父进程的环境,一旦你的脚本终止,改变就会丢失。
无论如何,从您的脚本中,您当然可以直接打印出控制代码。
printf '\033]2;Hello\a'
Run Code Online (Sandbox Code Playgroud)
这会更改窗口的标题一次,但如果任何其他程序稍后再次更改它,您的旧标题将丢失。更改提示的技巧很普遍,因为过去一些流行的程序通常会在您根据自己的喜好更改窗口标题后立即更改窗口标题(尽管我认为这不再是一个常见问题)。缺点是,如果有真正的理由更改您的窗口标题,现在只要您的 shell 再次显示其提示,它就会被取代。
如果您希望代码更改当前 shell 的提示,则不能将它们放在常规脚本中;但是您可以source
使用脚本文件,或者将命令放在 shell 函数中(通常在您的 Bash 配置文件中完成以使其持久化)。
顺便说一下,就计算提示的显示宽度而言,Bash 提示应该包括额外的控制代码来告诉 Bash 提示的一部分何时有效为零宽度。例如,如果您键入一个长命令然后需要退格,您会发现换行是不稳定的;Bash 将尝试重绘提示,但在错误的地方重绘,因为它认为屏幕控制代码对提示的宽度有贡献。您需要在它们周围添加这些\[
和\]
Bash 控制代码。
PS1="$ORIG\[$TITLE\]"
Run Code Online (Sandbox Code Playgroud)
(花括号并没有真正做出任何贡献,并且妨碍了可读性,所以我把它们去掉了。)
归档时间: |
|
查看次数: |
14483 次 |
最近记录: |