¿Hay alguna manera de hacer que el indicador bash sea dinámico, de modo que cambie de color cuando inicie sesión en un servidor?
Entonces, quiero que el color sea verde cuando esté en mi sistema y cambie a rojo cuando esté conectado a los servidores. Tengo una gran cantidad de servidores que no quiero poner diferente .bashrc
en todos esos.
Respuestas:
El indicador remoto lo establece el control remoto
~/.bashrc
. Entonces todavía necesita copiarlo en el servidor remoto. Sin embargo, puede usar un solo~/.bashrc
para todos los hosts y establecer el color de solicitud en función del nombre de host:Notas:
No establezca
PS1
si aún no está configurado (es decir, si el shell no es interactivo). Probar siPS1
no está vacío es una forma muy común de decidir si el shell es interactivo, y no desea confundir los programas que lo hacen. (Podría decirse que una prueba más precisa es verificar si$-
contienei
).Si desea que este código se ejecute al iniciar sesión en un servidor remoto, debe tener uno de los archivos de perfil siempre fuente
~/.bashrc
. Pero supongo que lo sabes.En
PS1
, los códigos de escape deben estar incluidos\[...\]
.\[033[m
restablece el primer plano y el fondo a los valores predeterminados. Así que aquí,:\w
aparece en primer plano / fondo terminal.\[033[48;5;XXXm\033[38;5;YYYm
establece el fondo / primer plano enXXX
/YYY
.Para una secuencia de comandos que vuelca los colores disponibles, intente
colortest
.Para comprobar cómo se vería la solicitud:
fuente
Si no desea (no puede) hacer que los controles remotos tengan una separación
PS1
, entonces diría "no", sería al menos terriblemente difícil. Tenga en cuenta que en una conexión SSH, el lado local no tiene una idea real de qué es un indicador de comandos de shell y qué es otra cosa, por lo que la configuración de colores para el indicador realmente debe provenir del control remoto. Puede establecer colores antes de comenzar la sesión, pero serían efectivos para todos los resultados, es decir, hasta quels
un editor establezca sus propios colores.Por supuesto, podría encontrar un contenedor para la sesión para detectar todo lo que parece un aviso y colorearlo, pero fácilmente daría lugar a falsos positivos (¿color en cada línea con un
$
?) Y sería terriblemente complicado en comparación con solo dejar caer un línea única a su.profile
o.bashrc
en cada máquina.Con varias máquinas, puede ser útil en cualquier caso buscar soluciones para sincronizar los cambios de configuración en todas ellas. Ya sea una herramienta hecha para ello, o simplemente un script, o simplemente ejecutando un bucle para copiar un (conjunto de) archivo (s) de configuración en todos ellos.
fuente
Estoy usando un script de envoltura con sshpass que primero cargará un perfil temporal y luego ssh usando este perfil (y eliminará el archivo temporal).
Las dos cosas principales del guión son estas:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"
Con esto, puede definir fácilmente los colores de las sesiones remotas.
Sé que esto no responde directamente a su pregunta, pero podría usarse para resolverlo.
fuente
sshpass -p
si es posible! Los argumentos de la línea de comando para ejecutar programas generalmente son visibles para todos los usuariosps
, y también lo será la contraseña. Incluso si no tiene otras cuentas de usuario en la máquina, puede imprimirla en la pantalla accidentalmente.sshpass
puede leer la contraseña de una variable de entorno, que no es demasiado difícil de usar. Además, considere las claves ssh si de todos modos va a guardar las credenciales de inicio de sesión en un archivo.Puede que le interese
context-color
, que he reunido para ese propósito exacto: https://github.com/ramnes/context-colorEs un script simple que, cuando se ejecuta, genera un color basado en el hash de la salida de un comando. Con esto instalado en algún lugar de tu
$PATH
, puedes hacer algo como esto en tu.bashrc
:(¿dónde
--prompt/-p
está el interruptor para que el color se escape para las indicaciones y\[\e[0m\]
la secuencia de escape para restablecer el color)Por defecto, el comando utilizado para generar el hash es
whoami; hostname
. Si solo desea que el color cambie de acuerdo con el nombre de host, puede cambiar el$CONTEXT
entorno variable (export CONTEXT="hostname"
) o simplemente usar la--context/-c
opción (context-color -c "hostname"
).Vea a continuación un ejemplo:
fuente