Modifica dei colori del terminale quando ssh-ing in macchina remota e viceversa

8

Se cerchi un modo per cambiare automaticamente i colori dei terminali quando esegui ssh-ing nel computer remoto e ripristina i colori predefiniti, quando esci dalla sessione ssh. Semplicemente, voglio avere un altro colore quando lavoro sulla macchina remota.

Qualche idea?

ps: non voglio usare iTerm2, ma Terminal.app standard

    
posta kobame 11.07.2011 - 14:05
fonte

2 risposte

9

Sto usando quanto segue.

Avere un comando shell, chiamato myssh , con contenuto:

PROFILE="$1";shift;
DEF="Basic" #the default profile name
echo "tell app \"Terminal\" to set current settings of first window to settings set \"${PROFILE}\""|osascript
ssh $@
echo "tell app \"Terminal\" to set current settings of first window to settings set \"${DEF}\""|osascript

e usa alias bash per la connessione, come:

alias ssweb='myssh Homebrew [email protected]'
alias ssmail='myssh Ocean [email protected]'

Quando voglio ssh nel server web, scrivo semplicemente ssweb nel terminale e ho ottenuto il profilo "Homebrew". Al termine della sessione ssh, AppleScript torna a "Base".

Gli alias dovrebbero andare nel tuo file $ HOME / .profile o simile bash-startup.

"Homebrew", "Ocean" ecc. sono i profili di impostazione dalle preferenze Terminal.app. Puoi anche impostare diversi caratteri, codifiche, ecc.

Ovviamente puoi usarlo direttamente (senza alias) come:

myssh Pro [email protected]
       ^        ^
       |        ssh command arguments
       terminal profile name
    
risposta data 11.07.2011 - 14:12
fonte
2

So che ci sono già un paio di risposte, ma qui c'è un'alternativa:

Non c'è un modo generale per cambiare il colore di sfondo, ma possiamo usare un modo standard per cambiare il titolo della finestra. Se accedi a molti dispositivi non "Unix server" (come dispositivi di rete, router, switch, firewall, ecc.), Allora devi usare le loro shell e non puoi installare le tue variabili di shell. Quindi, ecco un altro modo:

function ssh() {
  H=$(echo $@ | sed -e 's/.*@//g;s/ .*//g')
  echo $@ | grep '@' && U=$(echo $@ | sed -e 's/@.*//g;s/.* //g')
  echo -ne "3]0;${U:=$(whoami)}@${H%%.*}
function ssh() {
  H=$(echo $@ | sed -e 's/.*@//g;s/ .*//g')
  echo $@ | grep '@' && U=$(echo $@ | sed -e 's/@.*//g;s/.* //g')
  echo -ne "3]0;${U:=$(whoami)}@${H%%.*}%pre%7"
  unset H
  unset U
  /usr/bin/ssh $@
}
7" unset H unset U /usr/bin/ssh $@ }

Aggiungi questo al tuo .bashrc .

In sostanza, siccome le funzioni e gli alias sono preferiti per cercare nel percorso, questo prende il comando ssh e usa il testo prima e dopo "@" per impostare le variabili HOST e USER che poi usa per echo un codice ASCII che è riconosciuto dal terminale e utilizzato per impostare il titolo.

Devi usare "ssh [email protected]" per questo e non "ssh -l user host.blah"

Se non fornisci un nome utente lo imposterà come nome utente corrente (ovviamente se usi un file .ssh / config personalizzato (che uso molto), questo non sarà accurato, ma penso è abbastanza buono per essere utile.

    
risposta data 01.08.2011 - 14:25
fonte

Leggi altre domande sui tag