是否可以使用 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\$ '
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top