如何从命令行设置活动gnome-terminal的标题?

有没有办法在终端内设置gnome-terminal标题,而无需右键单击选项卡。 就像是:

active-terminal --title "Foo" 

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

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

 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" } 

然后你可以通过执行以下操作从命令行将标题设置为“kittens”:

 set_term_title kittens 

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

函数声明不适用于所有shell,因此另一种方法是声明一个别名,如下所示:

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

此命令特别导致标题更改为pwd。

当然,你需要在启动终端时初始化标题,所以不要忘记包含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= for others. Also, -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 = ; 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); 

在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 

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