Página siguiente Página anterior Índice general

9. Prompt dinámico con color según la carga del sistema

9.1 Un ejemplo de «prueba de concepto»

Esto es una «prueba de concepto» más que un prompt bonito: cambio de colores en el prompt dinámicamente. En este ejemplo, el color del nombre del host cambia dependiendo de la carga (a modo de aviso).

  #!/bin/bash
  #   "hostloadcolour" - 17 Octubre 98, by Giles
  #
  #   La idea aqui es cambiar el color del nombre del host en el prompt
  #   dependiendo de un valor de carga que sirve de umbral.

  # THRESHOLD_LOAD es el valor de la carga en un minuto
  # (multiplicado por 100) al cual se desea que el prompt
  # cambie de COLOUR_LOW a COLOUR_HIGH

  THRESHOLD_LOAD=200
  COLOUR_LOW='1;34'
            # light blue
  COLOUR_HIGH='1;31'
             # light red

  function prompt_command {
  ONE=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g")
  # Aparentemente "scale" en bc no se aplica a las multiplicaciones
  # pero si a las divisiones
  ONEHUNDRED=$(echo -e "scale=0 \n $ONE/0.01 \nquit \n" | bc)
  if [ $ONEHUNDRED -gt $THRESHOLD_LOAD ]
  then
      HOST_COLOUR=$COLOUR_HIGH
          # Light Red
  else
      HOST_COLOUR=$COLOUR_LOW
          # Light Blue
  fi
  }

  function hostloadcolour {

  PROMPT_COMMAND=prompt_command
  PS1="[$(date +%H%M)][\u@\[\033[\$(echo -n \$HOST_COLOUR)m\]\h\[\033[0;37m\]:\w]$ "
  }

Mediante su editor favorito, salve esto en un fichero llamado hostloadcolour. Si tiene instalado el paquete Bash Prompt, funcionará como un tema. Si no lo tiene, escriba source hostloadcolour seguido de hostloadcolour. De cualquiera de las dos formas, prompt_commad se convierte en una función del entorno. Si examina el código, notará que los colores ($COLOUR_HIGH y $COLOUR_LOW) se ponen mediante un código parcial de color, es decir, 1;34 en lugar de \[\033[1;34m\], cosa que hubiera preferido, pero no he sido capaz de que funcione con el código completo. Le agradecería que me avisara si lo consigue.


Página siguiente Página anterior Índice general