Rinominare la scheda del terminale per ospitare l'alias in ssh config


1

Sono nuovo di usare Mac (Mac Pro, OS X 10.8.4) e mi collego a molti host remoti usando ssh. Ho creato alias nel file .ssh / config e vorrei avere l'alias host come nome della scheda nel terminale.

Qualcuno può consigliare come può essere fatto?

Grazie mille.

Risposte:


3

MODIFICARE : Su Yosemite (OS X 10.10), usa invece:

function ssh () 
{ 
     servername=$(echo $@ | sed -E 's|([- a-zA-Z0-9:/]+)( *[^@ ]*@)([^@ ]*)|\3|')
     echo -ne "\033]0;${servername}\007";
     /usr/bin/ssh $@
}

Si noti che la funzione prevede che nome utente e nome server siano specificati come user@server (puoi usare anche l'indirizzo IP del server: user@a.b.c.d, il nome della scheda sarà impostato su a.b.c.d ). Altre combinazioni come -l user server non funzionerà correttamente.

Puoi disinserire la funzione con:

unset -f ssh

È possibile creare una funzione denominata ssh che imposta il nome della scheda terminale e quindi invoca /usr/sbin/ssh:

function ssh () 
{ 
    servername=$(echo $@ | sed 's|\([- a-zA-Z0-9:/]\+\) *\([^-]\+@\)*\([-a-zA-Z0-9.]\+\)|\3|' | awk '{print $1}');
    echo -ne "\033]0;${servername}\007";
    /usr/bin/ssh $@
}
  • servername=$(echo $@ ...

    La prima riga estrae il nome del server dagli argomenti passati a ssh. L'ho provato contro diversi possibili ssh invocazioni con e senza argomenti, ma non posso promettere che è a prova di proiettile.

  • echo -ne "\033]0;${servername}\007";

    La seconda riga è dove avviene la magia. \033]0;<name>\007 è una sequenza di ESCAPE che imposta il nome della scheda del terminale. Vedere questo articolo di Wikipedia per maggiori informazioni - questo particolare codice di escape è elencato nel sezione codici non CSI .

  • /usr/bin/ssh $@

    Inizio /usr/bin/ssh con argomenti forniti.

Aggiungi la funzione al tuo ~/.bashrc file (se non lo usi bash modificalo per far corrispondere la sintassi della tua shell e aggiungilo al file di avvio della tua shell) in modo che sia sempre accessibile.

Si noti che verrà anche impostato il nome della scheda terminale durante l'esecuzione di un comando remoto:

ssh user@server command

per esempio:

ssh jaume@myserver ls -l /

ssh -p 3422 user@host stampe -p nel titolo della scheda
Maxim Yefremov

1
@ efr Si prega di controllare la mia risposta modificata.
jaume

grazie ssh -p 3422 user@host ora stampa host
Maxim Yefremov

1

È possibile utilizzare l'argomento LocalCommand nel proprio file ~ / .ssh / config per eseguire un file bash o Applescript che imposta il nome della scheda.

Script Bash: ~ / .ssh / settabname.sh

#!/bin/bash

osascript -e 'delay 2' -e "tell application \"Terminal\" to tell window 1 to set custom title to \"$1\""

Il tuo file ~ / .ssh / config:

Host *
PermitLocalCommand yes

Host yourhostname
LocalCommand ~/.ssh/settabname.sh yourhostname &
...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.