osx - tastiera - terminal mac



Come faccio a cambiare la combinazione di colori della finestra di Apple Terminal quando eseguo l'ssh su un server specifico (6)

Quando eseguo l'ssh su un server di produzione remoto, desidero che lo schema dei colori della mia finestra di terminale cambi in qualcosa di brutto e spaventoso, preferibilmente rosso, per avvertirmi che sto toccando un server live spaventoso.

Come posso far sì che rilevi automaticamente che ho ssh'ed da qualche parte, e se da qualche parte si trova su un elenco specifico, cambia lo schema dei colori?

Voglio aggiornare lo schema di Terminal.app, non so come farei questo in un puro enux / unix env


Answer #1

Inserisci il seguente script in ~/bin/ssh (assicurati che ~/bin/ guardato prima /usr/bin/ nel tuo PATH):

#!/bin/sh

HOSTNAME=`echo [email protected] | sed s/.*@//`

set_bg () {
  osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

on_exit () {
  set_bg "{0, 0, 0, 50000}"
}
trap on_exit EXIT

case $HOSTNAME in
  production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;;
  *) set_bg "{0, 45000, 0, 50000}" ;;
esac

/usr/bin/ssh "[email protected]"

Lo script sopra estrae il nome host dalla riga "nomeutente @ host" (presuppone l'accesso agli host remoti con "ssh user @ host").

Quindi, in base al nome host, imposta uno sfondo rosso (per i server di produzione) o uno sfondo verde (per tutti gli altri). Di conseguenza tutte le finestre ssh avranno lo sfondo colorato.

Presumo che lo sfondo predefinito sia nero, quindi lo script ripristina il colore di sfondo sul nero al momento del logout dal server remoto (vedi "trap su_exit").

Si noti, tuttavia, che questo script non traccia la catena di accessi ssh da un host a un altro. Di conseguenza, lo sfondo sarà verde nel caso in cui si effettui il login al server di prova, quindi accedi alla produzione da esso.


Answer #2

I terminali Unix compatibili con Xterm hanno sequenze di escape standard per l'impostazione dei colori di sfondo e in primo piano. Non sono sicuro che Terminal.app li condivida; dovrebbe.

case $HOSTNAME in
    live1|live2|live3) echo -e '\e]11;1\a' ;;
    testing1|testing2) echo -e '\e]11;2\a' ;;
esac

Il secondo numero specifica il colore desiderato. 0 = valore predefinito, 1 = rosso, 2 = verde, ecc. Quindi questo frammento, quando viene inserito in un file .bashrc condiviso, fornirà uno sfondo rosso su server live e uno sfondo verde su quelli di prova. Dovresti anche aggiungere qualcosa come questo per ripristinare lo sfondo quando esci.

on_exit () {
    echo -e '\e]11;0\a'
}
trap on_exit EXIT

EDIT: Google ha attivato un modo per impostare il colore di sfondo utilizzando AppleScript . Ovviamente, questo funziona solo se eseguito sulla stessa macchina di Terminal.app. Puoi aggirare il problema con una coppia di funzioni wrapper:

set_bg_color () {
    # color values are in '{R, G, B, A}' format, all 16-bit unsigned integers (0-65535)
    osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

sshl () {
    set_bg_color "{45000, 0, 0, 50000}"
    ssh "[email protected]"
    set_bg_color "{0, 0, 0, 50000}"
}

Dovresti ricordarti di eseguire sshl invece di ssh quando ti connetti a un server live. Un'altra opzione è scrivere una funzione wrapper per ssh che analizza i suoi argomenti per i nomi host live noti e imposta lo sfondo di conseguenza.


Answer #3

Puoi impostare la variabile $ PS1 nel tuo .bashrc.

red='\e[0;31m'
PS1="$\[${red}\]"

EDIT: per fare questo aprire il terminale. Poi dici

#touch .bashrc

È quindi possibile aprire .bashrc in textEdit o in TextWrangler e aggiungere i comandi precedenti.


Answer #4

Una caratteristica meno nota di Terminal è che è possibile impostare il nome di un profilo di impostazioni sul nome di un comando e selezionerà quel profilo quando si crea un nuovo terminale tramite Shell> Nuovo comando ... o Shell> Nuova connessione remota ....

Ad esempio, duplicare il profilo predefinito, denominarlo "ssh" e impostarne il colore di sfondo su rosso. Quindi utilizzare New Command ... per eseguire ssh host.example.com .

Corrisponde anche agli argomenti, quindi puoi far sì che scelga impostazioni diverse per diversi host remoti, ad esempio.


Answer #5

Un'altra soluzione è impostare i colori nel file di configurazione ssh:

dentro ~ / .ssh / config

Host Server1
   HostName x.x.x.x
   User ubuntu
   IdentityFile ~/Desktop/keys/1.pem
   PermitLocalCommand yes
   LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {27655, 0, 0, -16373}"

Host Server2
   HostName x.x.x.x
   User ubuntu
   IdentityFile ~/Desktop/keys/2.pem
   PermitLocalCommand yes
   LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {37655, 0, 0, -16373}"

Answer #6

La combinazione delle risposte 1 e 2 ha il seguente:

Crea file ~/bin/ssh come descritto in 1 con il seguente contenuto:

#!/bin/sh
# https://.com/a/39489571/1024794
log(){
  echo "$*" >> /tmp/ssh.log
}
HOSTNAME=`echo [email protected] | sed s/.*@//`
log HOSTNAME=$HOSTNAME
# to avoid changing color for commands like `ssh [email protected] "some bash script"`
# and to avoid changing color for `git push` command:
if [ $# -gt 3 ] || [[ "$HOSTNAME" = *"git-receive-pack"* ]]; then
  /usr/bin/ssh "[email protected]"
  exit $? 
fi

set_bg () {
  if [ "$1" != "Basic" ]; then
    trap on_exit EXIT;
  fi
  osascript ~/Dropbox/macCommands/StyleTerm.scpt "$1"
}

on_exit () {
  set_bg Basic
}


case $HOSTNAME in
  "178.222.333.44 -p 2222") set_bg "Homebrew" ;;
  "178.222.333.44 -p 22") set_bg "Ocean" ;;
  "192.168.214.111") set_bg "Novel" ;;
  *) set_bg "Grass" ;;
esac

/usr/bin/ssh "[email protected]"

Rendilo eseguibile: chmod +x ~/bin/ssh .

Il file ~/Dropbox/macCommands/StyleTerm.scpt ha il seguente contenuto:

#https://superuser.com/a/209920/195425
on run argv
  tell application "Terminal" to set current settings of selected tab of front window to first settings set whose name is (item 1 of argv)
end run

Words Basic, Homebrew, Ocean, Novel, Grass sono da mac os terminal settings cmd,: