是否可以使用shell脚本设置屏幕标题?
我想过发送关键命令ctrl+ A shift-A Name
enter
我搜索了大约一个小时的关于如何模拟shell脚本中的击键,但没有找到答案.
您可以使用以下行设置screen/xterm标题:
#!/bin/bash mytitle="Some title" echo -e '\033k'$mytitle'\033\\'
[更新] - 根据要求我还包括以下@Espo提出的解决方案:
根据您的xterm版本或您的Linux发行版,上面的行可能会或可能不会工作,您可以尝试xterm-defaults:
#!/bin/bash mytitle="Some title" echo -e '\033]2;'$mytitle'\007'
有关详细信息,请参阅:http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3或参考以下@Espo的答案.
来自http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3
xterm转义序列
可以使用XTerm转义序列在运行的xterm中更改窗口和图标标题.以下序列在这方面很有用:
ESC]0;stringBEL
- 将图标名称和窗口标题设置为字符串
ESC]1;stringBEL
- 将图标名称设置为字符串
ESC]2;stringBEL
- 将窗口标题设置为字符串
其中ESC是转义字符(\ 033),BEL是钟形字符(\ 007).
在xterm中打印其中一个序列将导致窗口或图标标题被更改.
注意:这些序列适用于大多数xterm衍生物,例如nxterm,color-xterm和rxvt.其他终端类型通常使用不同的逃逸; 有关示例,请参阅附录.有关xterm转义序列的完整列表,请参阅文件ctlseq2.txt(随xterm分发一起提供)或xterm.seq(随rxvt分发一起提供).
打印转义序列
对于在此shell的整个生命周期中保持不变的信息(例如主机和用户名),只需回显shell rc文件中的转义字符串即可:
echo -n "\033]0;${USER}@${HOST}\007"应该生成一个像username @ hostname这样的标题,假设shell变量$ USER和$ HOST设置正确.echo的必要选项可能因shell而异(请参阅下面的示例).
对于可能在shell生命周期中更改的信息(例如当前工作目录),每次提示更改时都需要应用这些转义.这样,字符串就会根据您发出的每个命令进行更新,并且可以跟踪当前工作目录,用户名,主机名等信息.有些shell为此提供了特殊功能,有些则没有,我们必须插入标题序列直接进入提示字符串.这将在下一节中说明.
以下是编写屏幕标题重命名脚本的其他方法:
.ssh/config
使用SSH登录系统时,添加以下设置以自动设置屏幕标题:
Host * PermitLocalCommand yes LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\"
%h
您可以使用%n
,而不是代表您连接的计算机的主机名,这是您用于连接到计算机的实际名称/别名.
注意:您需要OpenSSH> = v5.1才能使用Localhost%n和%h参数.有关LocalCommand的更多信息,请查看'man ssh_config'.
要自动回复的标题,回到该本地主机的主机名,成交SSH会话之后,您可以添加一个转义序列给你提示变量PS1
中.bashrc
:
export PS1='you_favorite_PS1_here' if [ "$TERM" == 'screen' ]; then export PS1=${PS1}'\[\033k\h\033\\\]' fi
当使用.screenrc
配置显示您当前正在使用的屏幕"选项卡" 时,这些技巧特别有用.添加如下内容以.screenrc
使其正常工作:
caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c"
尝试以下命令,无需编辑任何文件或配置,如〜/ .bashrc,可以在运行时使用.
将静态文本设置为标题:(我的标题)
export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
将local/global变量设置为title:($ USER)
export PS1='\[\e]0;$USER\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
将命令输出设置为标题:(主机名)
export PS1='\[\e]0;`hostname`\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
设为默认值(恢复后退):
export PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
set_screen_title () { echo -ne "\ek$1\e\\" }