从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
– 将图标名称和窗口标题设置为stringESC]1;stringBEL
– 将图标名称设置为stringESC]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
当使用.screenrc
configuration时,这些技巧特别有用,它可以显示您当前正在工作的屏幕“标签”。 在.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 PS1
variables
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