如何从命令行设置活动 gnome 终端的标题?

如何从命令行设置活动 gnome 终端的标题?

有没有办法在终端内部设置 gnome-terminal 标题,而不必右键单击选项卡。例如:

active-terminal --title "Foo"

之前有一个相关问题,其答案几乎可以让你做到这一点:如何更改 Gnome-Terminal 标题?但这并没有设置 gnome-terminal 选项卡标题,只设置了窗口标题。

答案1

以下将终端的标题设置为“新终端标题”:

echo -en "\033]0;New terminal title\a"

您可能还需要更改环境变量 PS1,第一的但是,否则您的更改将不会显示,因为它会在每条命令后重置标题。Ubuntu 附带的默认 .bashrc 包含以下行:

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

...“\e]0;”代码告诉它将所有内容写入 title 和 icon-name 属性中的“\a”之前。您需要将其删除并将其设置为类似以下内容(即没有 \e]0; 代码):

PS1="${debian_chroot:+($debian_chroot)}\u@\h \w\a$ "

然后,您使用上述 echo 命令所做的任何更改都将更改终端标题。如果您要经常使用它,可以将其放入 ~/.bashrc 文件中的函数中:

set_term_title(){
   echo -en "\033]0;$1\a"
}

然后您可以通过以下命令从命令行将标题设置为“小猫”:

set_term_title kittens

(编辑 .bashrc 后,你必须重新启动 bash,以使更改生效)

答案2

函数声明并非在所有 shell 中都有效,因此另一种方法是声明别名,如下所示:

alias cd    'cd \!*; echo -en "\033]0;`pwd`\a"'

此命令特别会导致标题更改为密码。

当然,您会希望在启动终端时初始化标题,所以不要忘记包含 gnome-terminal --title。

我使用 perl 脚本来帮助我首先确定所有参数值,然后它调用一个新的终端,如下所示:

my $cmd = "gnome-terminal $window_with_profile $geometry $zoom $working_directory $temp_argv $title &";
system($cmd);

但是如何初始化这些值取决于你……

如果您愿意,欢迎您采用以下代码并对其进行调整以供您个人使用:

    #!/usr/bin/perl
    #use strict;
    use Getopt::Long;

    my $progName = "term.pl";

    =pod

    =head1 OBJECTIVE: open a gnome-terminal with a given path and a new background color

     #1# In order to use this script you first need to set up 10 different terminal profiles each named "theme1" - "theme10"
        Edit... profiles... new... theme1
        Each theme should use a different color scheme...

     The themes are later called with --window-with-profile=theme$int
     This script then selects the next one one to open based on the number saved in the ~/.term_theme_counter file.

     ### The argument "." opens the terminal with the same dir as you are currently in. 
         Without it, the terminal opens to "~". Use --working-directory=<DIR> for others. 
         Also, -dir=<DIR> has been added for convenience

     ### You can still pass additional gnome-terminal arguments like: --tab_with_profile etc into the command 

     ### Also see gnome-terminal --help 
            and gconf-editor and gconftool-2  --> /apps/gnome-terminal/profiles/ 
            for editing terminal props

      EXAMPLES:

      term.pl .
      term.pl /cadtools/tech/

    Credits: This script was written by Damian Green over the years but first posted publicly in 2013   

    =cut

    sub usage{
        system("perldoc $progName");
    };

    my $opt_h = "";
    my $geometry = "";
    my $zoom = "";
    my $window_with_profile = "";
    my $working_directory = "";
    my $temp_argv = " @ARGV ";

    #my $counter = int(rand(10));
    ###lets keep a running counter instead
    my $counter = 0;

    my $home = $ENV{"HOME"};
    $home = abs_path($home);

    my $counter_file = "$home/.term_theme_counter";
    if (-f $counter_file){
        open (INFILE, "< $counter_file");
        my @contents = <INFILE>;
        close INFILE;
        $counter = @contents[0];
    }else{
        open (OUTFILE, "> $counter_file");
        print OUTFILE $counter; 
        close OUTFILE;
    }

    $counter++;
    if ($counter > 10){
        $counter = 1;
    }   
        open (OUTFILE, "> $counter_file");
        print OUTFILE "$counter\n";
        close OUTFILE;

    use Cwd 'abs_path';
    my $pwd = abs_path();#expands /cadtools to /data/mmc/emc/cadtools_lnx/cadtoolsmy 
    my $title_path = ""; 

    ### first of all pull out the "." if there is one...
    if ($temp_argv =~ m/(\s+)(\.)(\s+)/){
        my $arg = $1.$2.$3;
        my $val = $2;
        $temp_argv =~s/\Q$arg\E/ /;                     #<- remove the arg from the temp_argv
        unless ($temp_argv =~ m/--working_directory/){
            $working_directory = "--working-directory=$pwd";#<- #<- set the new working dir
        }
        $title_path = $pwd;
    #}elsif ($temp_argv =~ m/(\s+)(\S+)(\s+)/ and -d $2){
    }elsif ($temp_argv =~ m/(\s+)((?!-)\S+)(\s+)/ and -d $2){
        my $arg = $1.$2.$3;
        my $val = $2;
        $val = abs_path($val);
        $temp_argv =~s/\Q$arg\E/ /; 
        unless ($temp_argv =~ m/--working_directory/){
            $working_directory = "--working-directory=$val";
        }
        $title_path = $val;
    }elsif ($temp_argv =~ m/(\s+)(--?dir=)(\S+)(\s+)/ and -d $3){# and -d $2){
        my $arg = $1.$2.$3.$4;
        my $val = $3;
        $val = abs_path($val);
        $temp_argv =~s/\Q$arg\E/ /; 
        unless ($temp_argv =~ m/--working_directory/){
            $working_directory = "--working-directory=$val";
        }
        $title_path = $val;
    }elsif($temp_argv !~ m/--working_directory/){
        $working_directory = "--working-directory=$home";
        $title_path = "$home";
    }

    if($temp_argv =~ m/(\s+)(--?geometry=)(\S+)(\s+)/){
        $geometry = $3;
        my $arg = $1.$2.$3.$4;
        $temp_argv =~s/\Q$arg\E/ /; 
    }
    if($temp_argv =~ m/(\s+)(--?window-with-profile=)(\S+)(\s+)/){
        $window_with_profile = $3;
        my $arg = $1.$2.$3.$4;
        $temp_argv =~s/\Q$arg\E/ /; 
    }
    if($temp_argv =~ m/(\s+)(--?zoom=)(\S+)(\s+)/){
        $zoom = $3;
        my $arg = $1.$2.$3.$4;
        $temp_argv =~s/\Q$arg\E/ /; 
    }
    if($temp_argv =~ m/(\s+)(--?h)(elp)?(\s+)/){
        &usage(); exit;
    }

    if (!$geometry){
        $geometry = "--geometry=150x30+180+500";
    }else{
        $geometry = "--geometry=$geometry";
    }
    if (!$zoom){
        $zoom = "--zoom=1";
        ### some machines have a small zoom by default and so you can adjust it here for different machines if you want.
    }else{
        $zoom = "--zoom=$zoom";
    }
    if (!$window_with_profile){
        ### if gnome themes arent working on your machine, you may have to comment the following line out...
        $window_with_profile = "--window-with-profile=theme$counter";
    }else{
        $window_with_profile = "--window-with-profile=$window_with_profile";
    }

    my $title = "--title=$title_path";

    my $cmd = "gnome-terminal $window_with_profile $geometry $zoom $working_directory $temp_argv $title &"; #--sm-client-id=greend12

    print "$cmd\n";
    system($cmd);

答案3

在 Ubuntu 12.10(我不确定以前的版本)中,默认的 .bashrc 中有以下行:

If this is an xterm set the title to user@host:dir
 case "$TERM" in
 xterm*|rxvt*)
 PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
  *)
;;
esac

因此,要获得您想要的标题形式,您只需编辑PS1此部分的值。例如,如果您希望将标题作为当前目录的名称,只需将其 更改\u@\h:\w\W

相关内容