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

1

Sono nuovo nell'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.

    
posta Arnkrishn 04.09.2013 - 06:23
fonte

2 risposte

3

EDIT : su Yosemite (OS X 10.10) usa invece:

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

Si noti che la funzione prevede che nome utente e nome server siano specificati come user@server (è possibile utilizzare anche l'indirizzo IP del server: [email protected] , il nome della scheda verrà impostato su a.b.c.d ). Altre combinazioni come -l user server non funzioneranno correttamente.

È possibile annullare la funzione con:

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

Puoi creare una funzione denominata ssh che imposta il nome della scheda terminale e richiama /usr/sbin/ssh :

ssh jaume@myserver ls -l /
  • servername=$(echo $@ ...

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

  • echo -ne "3]0;${servername}3]0;<name>/usr/bin/ssh $@77";

    La seconda riga è dove avviene la magia. /usr/bin/ssh è una sequenza ESCAPE che imposta il nome della scheda terminale. Vedi questo articolo di Wikipedia per maggiori informazioni - questo particolare codice di escape è elencato nel sezione codici non CSI .

  • ~/.bashrc

    Inizia bash con argomenti forniti.

Aggiungi la funzione al tuo file %code% (se non usi %code% modificalo per abbinare la sintassi della tua shell e aggiungila al file di avvio della tua shell) in modo che sia sempre accessibile.

Si noti che imposterà anche il nome della scheda terminale quando si esegue un comando remoto:

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

ad esempio:

function ssh () 
{ 
    servername=$(echo $@ | sed 's|\([- a-zA-Z0-9:/]\+\) *\([^-]\+@\)*\([-a-zA-Z0-9.]\+\)||' | awk '{print $1}');
    echo -ne "3]0;${servername}
ssh user@server command
7"; /usr/bin/ssh $@ }
    
risposta data 06.09.2013 - 10:00
fonte
1

Puoi utilizzare l'argomento LocalCommand nel tuo 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 &
...
    
risposta data 06.09.2013 - 10:16
fonte

Leggi altre domande sui tag