Come si imposta il titolo del Gnome-Terminal attivo dalla riga di comando?

C’è un modo per impostare il titolo di gnome-terminal all’interno del terminale stesso senza dover fare clic destro sulla scheda. Qualcosa di simile a:

active-terminal --title "Foo" 

In precedenza c’era una domanda correlata con una risposta che ti consente quasi di fare questo: come cambiare il titolo di Gnome-Terminal? ma ciò non imposta il titolo della scheda gnome-terminal solo il titolo della finestra.

Quanto segue imposterà il titolo del terminale su “Nuovo titolo del terminale”:

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

Probabilmente dovrai anche cambiare la variabile d’ambiente PS1, altrimenti le tue modifiche non verranno visualizzate perché resetterà il titolo dopo ogni comando. Il file .bashrc predefinito fornito con Ubuntu contiene la seguente riga:

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

… il “\ e] 0;” il codice dice di scrivere tutto su “\ a” sia nel titolo che nelle proprietà del nome dell’icona. Devi rimuoverlo e impostarlo su qualcosa di simile (cioè senza il codice \ e] 0;):

 PS1="${debian_chroot:+($debian_chroot)}\[email protected]\h \w\a$ " 

Quindi qualsiasi modifica apportata con il comando echo sopra cambierà il titolo del terminale. Se hai intenzione di usarlo molto, puoi inserirlo in una funzione nel tuo file ~ / .bashrc:

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

Quindi puoi semplicemente impostare il titolo su “gattini” dalla riga di comando facendo:

 set_term_title kittens 

(È necessario riavviare bash anche dopo aver modificato .bashrc, affinché le modifiche abbiano effetto)

Le dichiarazioni di funzione non funzionano in tutte le shell, quindi un altro approccio è quello di dichiarare un alias in questo modo:

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

Questo comando in particolare fa sì che il titolo cambi in qualunque sia il pwd.

Ovviamente vorrai inizializzare il titolo quando avvii il terminale, quindi non dimenticare di includere gnome-terminal –title.

Io uso uno script perl per aiutarmi a determinare tutti i valori degli argomenti prima e poi invoca un nuovo terminale in questo modo:

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

Ma come vuoi inizializzare quei valori dipende da te …

Sei il benvenuto a prendere il seguente codice e modificarlo per uso personale, se lo desideri:

  #!/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); 

In Ubuntu 12.10 (non sono sicuro delle versioni precedenti) c’è la seguente riga in default .bashrc:

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

Pertanto, per avere il titolo nel formato desiderato, è sufficiente modificare il valore di PS1 in questa parte. Se si desidera, ad esempio, avere il titolo come nome della directory corrente, basta cambiare \[email protected]\h: in \w in \W