从 shellscript 设置屏幕标题
-
18-09-2019 - |
题
是否可以使用 shell 脚本设置屏幕标题?
我考虑过发送按键命令之类的事情 控制键+A 转移-A Name
进入
我搜索了大约一个小时如何在 shell 脚本中模拟击键,但没有找到答案。
解决方案
可以使用以下行设置屏幕/ xterm的标题:
#!/bin/bash
mytitle="Some title"
echo -e '\033k'$mytitle'\033\\'
[UPDATE] - 由请求我还包括下面提出@Espo溶液:
根据您的xterm版本或您的Linux发行版上面的行可能会或可能无法正常工作,您可以尝试在xterm-默认:
#!/bin/bash
mytitle="Some title"
echo -e '\033]2;'$mytitle'\007'
有关更多的细节见:的http:// WWW .faqs.org /文档/ Linux的迷你/ Xterm的-Title.html#S3 或指由@Espo答案的下方。
其他提示
从 http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3
判断逃序列
窗口和标题可以改变 在一个正在运行的判断通过使用判断 逃生顺序。下 序列被用于这方面:
ESC]0;stringBEL
-设置标名称和窗口标题串ESC]1;stringBEL
-设置标名称的字符串ESC]2;stringBEL
-设置窗口标题串在ESC是逃字 (\033),BEL是贝尔字符 (\007).
印刷这些序列内 的判断会导致窗口或 标题应改变。
注:这些序列适用于大多数 判断衍生物,如nxterm, 颜色判断和rxvt.其他的终端 类型往往使用不同的逃;看看 附录的实例。的 完整的清单的判断逃序列 看看文件ctlseq2.txt配 与开发和讨论对所有人开放的分配,或 开发和讨论对所有人开放。seq,其中涉及与rxvt 分布。
印刷的义序列
信息是不断 整个生命期的这个外壳, 如主机和用户名,就会 我只想简单地回的逃离 串壳rc文件:
echo -n "\033]0;${USER}@${HOST}\007"
应该产生一个标题喜欢 用户名@hostname,假定的外壳 变量$USER美元的主机设置 正确。所需要的选项 回可能会发生变化的外壳(见的例子 下文)。
信息可以改变过 外壳的生命周期,例如流 工作的目录,这些逃脱 真正需要的是适用于每时间 迅速的变化。这种方式 串更新与每一个命令 你的问题和可跟踪的 信息例如当前的工作 目录用户名,hostname,等等。一些贝壳提供特殊的功能 为此目的,有些不和我们 必须插入标题序列 直接进入提串。此 说明在下一个部分。
下面是其他的方法来脚本屏幕标题的重命名:
添加下面的设置来在使用时的SSH登录到系统自动.ssh/config
设定画面标题:
Host *
PermitLocalCommand yes
LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\"
相反%h
,它代表你与,可以使用%n
,这是你用于连接到机器的实际名称/别名连接机器的主机名。的
注意:您需要的OpenSSH> = V5.1,以便能够使用本地主机%n和%H参数。检查出“人ssh_config中”关于LocalCommand更多信息。
要自动恢复的标题,回到那个本地主机的主机名的,在关闭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\$ '
设置局部/全局变量名称:($ 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\\"
}
您也可以拨打屏幕,并告诉它设置一个标题:
screen -X title "new title"
如果您在屏幕窗口的时候,它会设置窗口的名字。如果您在屏幕不是,它将设置最近打开的窗口的名称。
要添加到ESPO的回答,在xterm转义序列还可以被施加到击PS1
变量
ESC]0;stringBEL -- Set icon name and window title to string
ESC]1;stringBEL -- Set icon name to string
ESC]2;stringBEL -- Set window title to string
实施例
PS1='\e]0;string\a'
要使用ssh跳来跳去当启用自动更新标题,这增加~/.bashrc
:
ssh() {
echo -n -e "\033k$1\033\\"
/usr/bin/ssh "$@"
echo -n -e "\033k`hostname -s`\033\\"
}
echo -n -e "\033k`hostname -s`\033\\"
请参阅 HTTP://linuxepiphany.blogspot。 com.ar/2010/05/good-screenrc-config-setup.html
# add the following in your ~/.bashrc or ~/.bash_profile
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
甚至更好的复制整个概念从的此处
我对这个问题的解决方案是创建一个bash脚本,并将其添加到我的〜/ .bashrc文件:
set-title() {
ORIG==$PS1
TITLE="\e];$@\a"
PS1=${ORIG}${TITLE}
}
现在,当我在任何bash外壳会话是,I型“设置标题desired_title”,并将其改变为“所需的标题”。 此作品为Ubuntu的多个版本,目前在16.04动力学
我从该解决方案在这里。我再次寻找它,无法找到它,我想我会在这里发布兴趣的人。
我通过与其他人进行实验得到了这个解决方案,比如@flurin-arner,我启动了@weston-ganger 设置标题(). 。我也用过@imgx64 提示_DIRTRIM 建议。我也在使用@itseranga git分支提示符, ,虽然这与问题无关,但它确实显示了您可以使用提示做什么。
首先如韦斯顿及以上所示
TITLE="\[\e]2;$*\a\]"
可以用来手动设置终端标题,“$*”是命令行输入,但不是我们想要的。
第二,如上所述,我还将 git 分支添加到我的提示符中,这又不是问题的一部分。
export PROMPT_DIRTRIM=3
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "
第三,通过实验,我复制了上面的 TITLE 代码,将 $* 设置为固定字符串并尝试了以下操作:
see: \[\e]2;'SomeTitleString'\a\]
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;'SomeTitleString'\a\] $ "
这达到了预期的效果!最终,我希望将基本路径作为我的标题。PS1 参数 显示 \W 是基本路径,所以我的解决方案是这样的:
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;\W\a\] $ "
没有 git 分支:
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\[\033[00m\]\[\e]2;\W\a\] $ "
导致 git-branch 提示:
user@host ~/.../StudyJava (master) $
导致没有 parse_git_branch 的提示:
user@host ~/.../StudyJava $
其中 pwd 给出
/home/user/somedir1/otherdir2/StudyJava
和终端标题
StudyJava
笔记:从上面的 @seff 来看,我基本上用“\W”替换“我的标题”
export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '