ventanas tunear terminales temas pro para mejores macbook mac editar como colores color cambiar osx terminal osx-leopard

osx - tunear - ¿Cómo puedo hacer que la ventana del terminal de apple cambie automáticamente la combinación de colores cuando realizo ssh a un servidor específico?



mejores terminales para mac (8)

¿Por qué no cambiar el intérprete de comandos del shell siempre que haya iniciado sesión a través de SSH? Generalmente hay variables de shell específicas: SSH_CLIENT , SSH_CONNECTION , SSH_TTY

Cuando entro en un servidor de producción remoto, me gustaría que el esquema de colores de la ventana de mi terminal cambie a algo brillante y atemorizante, preferiblemente rojo, para advertirme que estoy tocando un servidor de miedo en vivo.

¿Cómo puedo hacer que detecte automáticamente que tengo ssh''ed en alguna parte, y si ese lugar está en alguna lista específica, cambie el esquema de colores?

Quiero actualizar el Esquema de Terminal.app, no sé cómo lo haría en un entorno de linux / unix puro


Los terminales Unix compatibles con Xterm tienen secuencias de escape estándar para configurar los colores de fondo y primer plano. No estoy seguro si Terminal.app los comparte; debería.

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

El segundo número especifica el color deseado. 0 = predeterminado, 1 = rojo, 2 = verde, etc. Por lo tanto, este fragmento, cuando se coloca en un .bashrc compartido, le dará un fondo rojo en los servidores en vivo y un fondo verde en los de prueba. También debe agregar algo como esto para restablecer el fondo cuando cierre la sesión.

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

EDITAR: Google se convirtió en una forma de establecer el color de fondo con AppleScript . Obviamente, esto solo funciona cuando se ejecuta en la misma máquina que Terminal.app. Puede solucionarlo con un par de funciones de envoltura:

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 "$@" set_bg_color "{0, 0, 0, 50000}" }

Tendrá que recordar ejecutar sshl en lugar de ssh cuando se conecte a un servidor en vivo. Otra opción es escribir una función de contenedor para ssh que escanea sus argumentos para nombres de host en vivo conocidos y establece el fondo en consecuencia.


Puede establecer la variable $ PS1 en su .bashrc.

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

EDITAR: para hacer esto abre la Terminal. Luego dice

#touch .bashrc

A continuación, puede abrir .bashrc en textEdit o en TextWrangler y agregar los comandos anteriores.


Coloque la siguiente secuencia de comandos en ~/bin/ssh (asegúrese de que ~/bin/ miró antes de /usr/bin/ en su RUTA):

#!/bin/sh HOSTNAME=`echo $@ | 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 "$@"

La secuencia de comandos anterior extrae el nombre de host de la línea "nombredeusuario @ host" (asume que inicia sesión en hosts remotos con "usuario de ssh @ host").

Luego, dependiendo del nombre de host, establece el fondo rojo (para servidores de producción) o el fondo verde (para el resto). Como resultado, todas sus ventanas ssh serán con fondo de color.

Supongo que aquí su fondo predeterminado es negro, por lo que el script revierte el color de fondo a negro cuando cierra la sesión desde el servidor remoto (consulte "trap on_exit").

Sin embargo, tenga en cuenta que este script no rastrea la cadena de inicios de sesión ssh de un host a otro. Como resultado, el fondo será verde en caso de que inicie sesión en el servidor de prueba primero, luego inicie sesión en producción desde allí.


Una característica menos conocida de Terminal es que puede establecer el nombre de un perfil de configuración en un nombre de comando y seleccionará ese perfil cuando cree un nuevo terminal mediante Shell> Nuevo comando ... o Shell> Nueva conexión remota ....

Por ejemplo, duplique su perfil predeterminado, asígnele el nombre "ssh" y establezca el color de fondo en rojo. Luego use New Command ... para ejecutar ssh host.example.com .

También coincide en argumentos, por lo que puede hacer que elija diferentes configuraciones para diferentes hosts remotos, por ejemplo.


Aquí hay una solución combinada basada en un par de respuestas existentes que maneja la salida. También incluye un poco más si no desea tratar con valores de color de 16 bits.

Esto debe colocarse en su ~ / .bash_profile

# Convert 8 bit r,g,b,a (0-255) to 16 bit r,g,b,a (0-65535) # to set terminal background. # r, g, b, a values default to 255 set_bg () { r=${1:-255} g=${2:-255} b=${3:-255} a=${4:-255} r=$(($r * 256 + $r)) g=$(($g * 256 + $g)) b=$(($b * 256 + $b)) a=$(($a * 256 + $a)) osascript -e "tell application /"Terminal/" to set background color of window 1 to {$r, $g, $b, $a}" } # Set terminal background based on hex rgba values # r,g,b,a default to FF set_bg_from_hex() { r=${1:-FF} g=${2:-FF} b=${3:-FF} a=${4:-FF} set_bg $((16#$r)) $((16#$g)) $((16#$b)) $((16#$s)) } # Wrapping ssh command with extra functionality ssh() { # If prod server of interest, change bg color if ...some check for server list then set_bg_from_hex 6A 05 0C end # Call original ssh command if command ssh "$@" then # on exit change back to your default set_bg_from_hex 24 34 52 fi }

  • set_bg - toma 4 (8 bit) valores de color
  • set_bg_from_hex - toma 4 valores hexadecimales. la mayoría de mis referencias de color que uso están en hexadecimal, así que esto me lo facilita. Se podría tomar un paso más para analizar realmente #RRGGBB en lugar de RR GG BB, pero funciona bien para mí.
  • ssh - envolviendo el comando ssh predeterminado con cualquier lógica personalizada que desee. La instrucción if se usa para manejar la salida para restablecer el color de fondo.

Otra solución es establecer los colores en el archivo de configuración 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}"


Las respuestas combinadas 1 y 2 tienen lo siguiente:

Cree el archivo ~/bin/ssh como se describe en 1 con el siguiente contenido:

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

Hazlo ejecutable: chmod +x ~/bin/ssh .

File ~/Dropbox/macCommands/StyleTerm.scpt tiene el siguiente contenido:

#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

Las palabras Basic, Homebrew, Ocean, Novel, Grass son de la configuración de terminal de mac os cmd,: