Estoy usando Ubuntu y puedo cambiar manualmente el bash
color del indicador de shell a verde usando
export PS1="\e[0;32m[\u@\h \W]\$ \e[m"
Sin embargo, quiero que el color del indicador de shell cambie automáticamente cada vez que abra una nueva terminal o pestaña. Soy consciente de que el tty TERM básico tiene 16 colores, y está bien rotar los colores si hay más de 16 terminales abiertos. ¿Funcionará también la solución cuando me conecte Putty
, tmux
o screen
?
Mi idea es escribir un script de shell y colocarlo en el .bashrc
que detecte la nueva sesión de terminal que el usuario ha abierto e incremente un contador global de \e[0;31m[
a \e[0;47m[
. ¿Cómo detectar el número de terminales abiertas por el usuario?
fuente
tty
. Supongo que nosotros / otros nos hemos concentrado demasiado en esa "pregunta" y olvidamos que podría haber otras soluciones para toda la "necesidad" :) Incluso jugaría con la implementación de un selector de color aleatorio. Si son 256 colores, la selección de colores iguales / similares no debería suceder mucho. Sin embargo, la configuración manual de colores para los números de puntos dados dará una mejor personalización.color="\e[38;5;"$(((RANDOM % 231 )+1))"m"
(solo 231 para rechazar la escala de grises), sin embargo, muchos de esos colores resultaron ser solo diferentes tonos y algunos de ellos son oscuros, por lo que podría ser casi invisible y creo que nadie lo usará en la vida real ...En una situación de usuario único, si tomamos el ejemplo de
xterm
, simplemente podemos contar el número de pids dexterm
;xterm
crea un pid separado para cada ventana.gnome-terminal
Sin embargo, ejecuta un solo pid, pero la buena noticia es que crea un proceso hijo para cada ventana y / o pestaña. Podemos recuperar estos procesos secundarios mediante el comando:Sin embargo, hay algunas complicaciones con las que lidiar:
Leyendo su pregunta, podemos suponer que el usuario en este caso es en realidad el propietario de la sesión x . Por lo general, simplemente podemos usar la
$USER
variable-, pero esto podría no coincidir con el usuario actualmente conectado$DISPLAY
.En una situación multiusuario, los pids que pertenecen a la aplicación de terminal (o cuál) no necesariamente pertenecen a la actual
$DISPLAY
. Necesitamos separar solo los pids relevantes y los pids secundarios.En Unity (15.10 o inferior), si un segundo usuario inicia sesión, se inicia un proceso adicional (
gnome-pty-helper
), que aparece como un proceso secundariognome-terminal
, pero el proceso (obviamente) no tiene una ventana o pestaña. En Mate , el proceso existe de todos modos.En breve
Para contar el número de pestañas y / o ventanas de una aplicación de terminal, necesitamos:
$DISPLAY
(sesión x)$DISPLAY
gnome-pty-helper
ejecuta, para corregir el número.Sin embargo, esto puede ser programado para encontrar de manera confiable el número de ventanas y pestañas abiertas actualmente.
La secuencia de comandos
En el siguiente script, la aplicación de terminal de destino se utiliza como argumento . El script funciona en muchas terminales en las que lo probé. Una excepción es
Tilda
en este momento.Un ejemplo
gnome-terminal
ventanas, uno (el que está en la imagen) con tresgnome-terminal
ventanas y dosxterm
ventanas.El comando:
salidas:
mientras
salidas:
La secuencia de comandos
Usar
Copie el script en un archivo vacío, guárdelo como
get_terms.sh
, hágalo ejecutable y ejecútelo con el comando:fuente
gnome-pty-helper
ejecución, incluso cuando solo hay un usuario conectado (justo después de reiniciar) y cuando abro cualquier cantidad de terminales se ejecuta en segundo lugar, el mismo ayudante. Su nuevo script parece estar funcionando para mate-terminal (no pudo causar esa cosa cero), pero con xterm, cuando solo tengo 1 abierto, se muestra0
y comienza a mostrar un buen número solo después del segundo y con gnome-terminal siempre muestra uno menos (se genera0
cuando solo se abre uno).Una
awk
forma:Explicación:
En el comando 1 liner anterior,
awk
se utiliza para encontrar el recuento de terminales. Dentro delawk
programa, solo está verificando el número de líneas devueltas por quién ordena: 1.fuente
who | awk 'END{print NR - 1}'
ya que lo que quieres es número de líneas - 1.Una forma simple también puede ser simplemente ejecutar
System Monitor
(si se inicia desde la Terminal, debe escribirgnome-system-monitor
) y, en la pestaña "Procesos", organice los procesos en ejecución por Nombre y luego cuente el número de ocurrenciasBash
en la lista (estarán todos juntos si lo ordena por nombre, por lo que es fácil contar).Tenga en cuenta que debe buscar
Bash
y no buscarGnome Terminal
si desea ver el número de terminales abiertas por usuario. Una vez que abra una TerminalGnome Terminal
, también aparecerá en la lista de Procesos, pero seguirá siendo una, incluso si se abren más Terminales. El botón "Ver" en leSystem Monitor
permite establecer qué procesos ver, por ejemplo. Todos los procesos / Procesos de usuario / Activo ...fuente