从shellscript设置屏幕标题

是否可以使用shell脚本来设置Screen-Title

我想了一些像发送键盘命令Strg+A Shift-A Name <Enter>

我search了大约一个小时如何在shell脚本中模拟击键,但没有find答案。

感谢帮助!

Beerweasle

您可以使用以下几行来设置屏幕/ xterm标题:

 #!/bin/bash mytitle="Some title" echo -e '\033k'$mytitle'\033\\' 

[更新] – 通过请求,我还包括下面的@Espo提出的解决scheme:

根据你的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 – 将图标名称和窗口标题设置为string
  • ESC]1;stringBEL – 将图标名称设置为string
  • ESC]2;stringBEL – 将窗口标题设置为string

其中ESC是转义字符(\ 033),BEL是钟形字符(\ 007)。

在xterm中打印这些序列之一将导致窗口或图标标题被改变。

注:这些序列适用于大多数xterm衍生物,如nxterm,color-xterm和rxvt。 其他terminaltypes通常使用不同的转义; 例子见附录。 有关xterm转义序列的完整列表,请参阅xterm分发附带的文件ctlseq2.txt或rxvt分发附带的xterm.seq。

打印转义序列

对于在此shell的整个生命周期中不变的信息,例如host和username,只需在shell rc文件中回显转义string即可:

  echo -n "\033]0;${USER}@${HOST}\007" 

应该产生一个像username @ hostname这样的标题,假设shellvariables$ USER和$ HOST设置正确。 echo所需的选项可能因shell而异(请参阅下面的示例)。

对于在shell的生命周期中可能改变的信息,比如当前的工作目录,这些转义确实需要在每次提示改变时应用。 这样,string就会随着你发出的每个命令而更新,并且可以跟踪当前的工作目录,用户名,主机名等信息。一些shell为此提供了特殊的function,有些则不然,我们必须插入标题序列直接进入提示string。 这在下一节中说明。

以下是脚本重命名屏幕标题的其他方法:

将以下设置添加到.ssh/config中,使用SSHlogin系统时自动设置屏幕标题:

 Host * PermitLocalCommand yes LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\" 

%h代表你连接的机器的主机名,你可以使用%n ,这是你用来连接机器的实际名称/别名。

注意:您需要OpenSSH> = v5.1才能使用Localhost%n和%h参数。 查看“man ssh_config”获取更多有关LocalCommand的信息。

要在closuresSSH会话之后自动将标题还原到本地主机的名称,可以在.bashrc向您提示转义PS1添加转义序列:

 export PS1='you_favorite_PS1_here' if [ "$TERM" == 'screen' ]; then export PS1=${PS1}'\[\033k\h\033\\\]' fi 

当使用.screenrcconfiguration时,这些技巧特别有用,它可以显示您当前正在工作的屏幕“标签”。 在.screenrc添加如下内容来实现这个function:

 caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c" 
 set_screen_title () { echo -ne "\ek$1\e\\" } 

尝试下面的命令,不需要像〜/ .bashrc那样编辑任何文件或configuration,可以在运行时使用。

将静态文本设置为标题:(我的标题)

 export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' 

设置本地/全局variables为标题:($ 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\$ ' 

你也可以调用屏幕并告诉它设置一个标题:

 screen -X title "new title" 

如果你在屏幕窗口中,它将设置该窗口的名称。 如果你不在屏幕上,它将设置最近打开的窗口的名称。

要添加到Espo的答案,xterm转义序列也可以应用于Bash PS1variables

 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

一个真正简单的解决scheme(在我尝试了迄今为止所见过的所有的方法之后)…如果你有一个可以安装'xtitle'的Ubuntu / Minttypes的系统:

sudo apt-get install xtitle

之后,您只需使用如下命令:xtitle我的标题

你会得到:“terminal – 我的标题”

  # add the following in your ~/.bashrc or ~/.bash_profile PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' 

或者甚至更好地复制整个概念,以在这里的许多主机之间自定义您的bashconfiguration