Vorrei impostare il titolo del terminale in user@host
modo da poter facilmente capire a quale macchina sono connesso dal titolo della finestra. C'è un modo per farlo da SSH o dal Terminale GNOME?
Vorrei impostare il titolo del terminale in user@host
modo da poter facilmente capire a quale macchina sono connesso dal titolo della finestra. C'è un modo per farlo da SSH o dal Terminale GNOME?
Risposte:
Sì. Ecco un esempio per bash usando PS1 che dovrebbe essere distro-agnostico:
In particolare, la sequenza di escape \[\e]0; __SOME_STUFF_HERE__ \a\]
è interessante. Ho modificato questo per essere impostato in una variabile separata per maggiore chiarezza.
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
TITLEBAR='\[\e]0;\u@\h\a\]'
# Same thing.. but with octal ASCII escape chars
#TITLEBAR='\[\033]2;\u@\h\007\]'
if [ "$color_prompt" = yes ]; then
PS1="${TITLEBAR}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ "
else
PS1="${TITLEBAR}\u@\h:\W\$ "
fi
unset color_prompt force_color_prompt
Si noti inoltre che ci possono essere molti modi per impostare il titolo di un xterm, a seconda del programma terminale in uso e della shell. Ad esempio, se stai usando Konsole di KDE, puoi ignorare l'impostazione del titolo andando su Settings
-> Configure Profiles
-> Edit Profile
-> Tabs
e impostando le impostazioni Tab title format
e Remote tab title format
.
Inoltre, potresti voler controllare:
\h
quel prompt solo se $SSH_CLIENT
non è vuoto.
\[\e]2;\u@\h\a
. (Ho anche modificato la mia risposta con quelle informazioni)
Ecco una versione dello script bash SSH che uso che imposta il titolo e il prompt dei comandi del server remoto senza apportare modifiche al server remoto.
my_ssh.sh:
#!/bin/bash
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
ssh -t $1@$2 "export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"
Puoi invocarlo chiamando ./my_ssh.sh username nome host
Quanto segue funziona per me (probabilmente solo su gnome-terminal):
comp@home$ cat /usr/bin/ssh
#!/bin/bash
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"
Dove il comando ssh_bkup è semplicemente "ssh" di base con un nome modificato, che viene chiamato subito dopo che il comando echo modifica il titolo del terminale corrente.
~/bin
ha priorità nel mio percorso, quindi ho inserito la tua sceneggiatura nel mio ~/bin/ssh
. L'ultima riga chiama esplicitamente a /usr/bin/ssh
. In questo modo, altri utenti usano ancora lo standard ssh
quando hanno effettuato l'accesso su quella macchina e (poiché le nostre home directory sono sul server, account LDAP) ottengo la funzionalità su qualunque macchina a cui ho effettuato l'accesso.
questa è la versione alias
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
SETPC="export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"
alias myssh='function _myssh(){ ssh -t $1@$2 $SETPC; };_myssh'