有没有办法在终端内部设置 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