如何在不更改提示字符串的情况下更改终端标题?

如何在不更改提示字符串的情况下更改终端标题?

我已经自定义了命令提示符以使用某种颜色和完整路径显示当前目录。现在我想将窗口标题设置为仅目录名称(而不是完整路径)。您能告诉我如何在 korn shell 中实现这一点吗?谢谢。

答案1

我发现实现此目的的方法是为 cd 创建一个别名。我将以下代码放入.profile文件中,从而达到了目的

xcd() { cd $*; echo -ne "\033]0;$(basename $PWD)\007"; }
alias cd='xcd'

非常感谢 Kusalananda 提供了我实际上正在寻找的解决方案:

cd() { command cd "$@"; echo -ne "\033]0;${PWD##*/}\007"; }

答案2

根据该网站:如何更改 xterm 的标题:不同 shell 的示例

ksh 提供的功能和扩展很少,因此我们必须在提示符中插入转义字符串以使其动态更新。此示例生成 username@hostname: 目录的标题和 ksh$ 提示。

case $TERM in
    xterm*)
        HOST=`hostname`
        PS1='^[]0;${USER}@${HOST}: ${PWD}^Gksh$ '
        ;;
    *)
        PS1='ksh$ '
        ;;
esac

但是,$PWD 生成完整的目录路径。我们可以使用 ${...##...} 结构从目录中删除 $HOME/ 前缀。我们还可以使用 ${...%%...} 来截断主机名:

HOST=`hostname`
HOST=${HOST%%.*}
PS1='^[]0;${USER}@${HOST}: ${PWD##${HOME}/}^Gksh$ '

请注意,提示字符串中的 ^[ 和 ^G 是 ESC 和 BEL 的单个字符(可以在 emacs 中使用 Cq ESC 和 Cq Cg 输入)。

相关内容