MinTTY是Cygwin的新默认控制台。
什么是更改MinTTY窗口标题的shell命令(可以在.bashrc中放入某些内容,甚至可以在.zshrc中放入某些内容)?
我希望窗口的标题成为当前目录的路径,并在我在控制台内切换目录时对其进行更新。
-T <title>在Windows快捷方式属性中使用。另请参阅mintty man page。
MinTTY是Cygwin的新默认控制台。
什么是更改MinTTY窗口标题的shell命令(可以在.bashrc中放入某些内容,甚至可以在.zshrc中放入某些内容)?
我希望窗口的标题成为当前目录的路径,并在我在控制台内切换目录时对其进行更新。
-T <title>在Windows快捷方式属性中使用。另请参阅mintty man page。
Answers:
怎么了
以下命令对我不起作用:
echo -ne "\e]0;MYTITLE\a"
事实证明,我的默认Cygwin安装在.bashrc中包含以下提示定义:
PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$
请注意,\e]0;\w\a每次出现提示时,提示的第一部分()都会设置Windows标题。
解决方案
将这些行添加.bashrc到定义2个函数的行中:
function settitle() {
export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
echo -ne "\e]0;$1\a"
}
function settitlepath() {
export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
}
然后,您可以使用以下命令设置自定义标题:
settitle "MYWonderfullTest here"
或者您可以使用以下命令恢复为cygwin的默认设置(当前路径):
settitlepath
希望这可以帮助
source ~/.bashrc-否则cygwin仍将运行cygwin启动时在磁盘上的旧版本bashrc。-测试Cygwin version 2.8.1 (64 bit)-2017年版本
您可以使用xterm控制序列对此进行更改,如下所示:
echo -ne '\e]0;Title\a'
将其放在.zshrc中:
# Change title of MinTTY to current dir
function settitle() {
echo -ne "\033]2;"$1"\007"
}
function chpwd() {
settitle $(cygpath -m `pwd`)
}
函数settitle中特殊字符的顺序使MinTTY可以更改窗口的标题。
在zsh中,如果使用特殊名称chpwd定义函数,则将在每个chdir之后调用该函数。
在WinXP上运行,并且Cygwin 1.7和MinTTY运行zsh。
settitle "$(pwd)@$HOST"
1)回显$ PS1并将该字符串复制到剪贴板或文本编辑器中,如下所示:
回声$ PS1
2)编辑〜/ .bash_profile并在下面添加外壳代码,必要时替换$ PS1,但将$ {TERMINAL_TITLE}变量保持为“ false”状态。
3)保存文件并设置TERMINAL_TILE环境变量,如下所示
export TERMINAL_TITLE =“我的自定义标题”
4)获取您的bash个人资料,如
。〜/ .bash_profile
请享用
如果[-z“ $ {TERMINAL_TITLE}”]
然后
PS1 ='\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $'
其他
PS1 ='\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $'
科幻
我使用了Leonel的答案,但发现这样做时标题只会闪烁,这意味着至少echo命令可以按预期工作。我使用启用了调试模式的交互式方式运行zsh
zsh -xv
更改目录显然会调用title()after precmd()和之后调用的另一个函数chpwd(),从而有效地覆盖了它们。所以我将其插入到我的.zshrc中,并且它可以正常工作。
function settitle() {
echo -ne "\033]2;"$1"\007"
}
function title() {
settitle $(cygpath -m `pwd`)
}
如果您想使用chpwd()或precmd()代替,只需禁用标题功能:title(){}。
我只是想分享我的解决方案,因为我使用薄荷来执行脚本。
我的薄荷快捷方式设置为:
C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /usr/bin/bash.exe -l -c /scripts/connect.sh
在上面的快捷方式中调用的我编写的connect.sh脚本将提示我要连接的服务器,并执行脚本中定义的settitle函数。
#!/bin/bash
echo "Enter servername when prompted"
echo -n "servername: "
read servername
function settitle() {
echo -ne "\033]2;"$servername"\007"
}
function title() {
settitle $(cygpath -m `pwd`)
}
settitle
ssh my_username@$servername
title如果不使用功能,为什么要定义它?
$PS1)已经包含将窗口标题设置为user @ machine:working_directory的控制序列。