从shellscript设置屏幕标题

Bee*_*sle 49 bash gnu-screen xterm title

是否可以使用shell脚本设置屏幕标题?

我想过发送关键命令ctrl+ A shift-A Name enter

我搜索了大约一个小时的关于如何模拟shell脚本中的击键,但没有找到答案.

Shi*_*rin 52

您可以使用以下行设置screen/xterm标题:

#!/bin/bash

mytitle="Some title"
echo -e '\033k'$mytitle'\033\\'
Run Code Online (Sandbox Code Playgroud)

[更新] - 根据要求我还包括以下@Espo提出的解决方案:

根据您的xterm版本或您的Linux发行版,上面的行可能会或可能不会工作,您可以尝试xterm-defaults:

#!/bin/bash

mytitle="Some title"
echo -e '\033]2;'$mytitle'\007'
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅:http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3或参考以下@Espo的答案.

  • 这不适合我.我在xterm和Konsole(来自KDE4)中测试过.``\ e] 2; title\a"`工作. (11认同)
  • 如果启用了“允许SendEvents”,则这将不起作用,这在ubuntu的最新版本中似乎是默认设置:https://bugs.launchpad.net/ubuntu/+source/xterm/+bug/495733 (2认同)

Esp*_*spo 19

来自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"
Run Code Online (Sandbox Code Playgroud)

应该生成一个像username @ hostname这样的标题,假设shell变量$ USER和$ HOST设置正确.echo的必要选项可能因shell而异(请参阅下面的示例).

对于可能在shell生命周期中更改的信息(例如当前工作目录),每次提示更改时都需要应用这些转义.这样,字符串就会根据您发出的每个命令进行更新,并且可以跟踪当前工作目录,用户名,主机名等信息.有些shell为此提供了特殊功能,有些则没有,我们必须插入标题序列直接进入提示字符串.这将在下一节中说明.


小智 12

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

.ssh/config使用SSH登录系统时,添加以下设置以自动设置屏幕标题:

Host *
  PermitLocalCommand yes
  LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\" 
Run Code Online (Sandbox Code Playgroud)

%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
Run Code Online (Sandbox Code Playgroud)

当使用.screenrc配置显示您当前正在使用的屏幕"选项卡" 时,这些技巧特别有用.添加如下内容以.screenrc使其正常工作:

caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c"
Run Code Online (Sandbox Code Playgroud)


Sef*_*eff 10

尝试以下命令,无需编辑任何文件或配置,如〜/ .bashrc,可以在运行时使用.

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

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

将local/global变量设置为title:($ USER)

export PS1='\[\e]0;$USER\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Run Code Online (Sandbox Code Playgroud)

将命令输出设置为标题:(主机名)

export PS1='\[\e]0;`hostname`\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Run Code Online (Sandbox Code Playgroud)

设为默认值(恢复后退):

export PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Run Code Online (Sandbox Code Playgroud)

  • 这改变了提示。 (2认同)

Ran*_*tor 7

set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}
Run Code Online (Sandbox Code Playgroud)