Localizar y solucionar los errores de los script shell suele ser bastante sencillo, pero no existe herramientas de ayuda específicas. Vamos a resumir en esta sección rápidamente los métodos más comunes.
Cuando tiene lugar un error, la shell suele mostrar el número de la línea que contiene el error. Si el error no es aparente a simple vista, puede añadir alguna sentencia echo
extra para mostrar los contenidos de las variables y los fragmentos de código de prueba escribiéndolos simplemente en la shell interactivamente.
Como los script se interpretan, no hay una compilación para modificar y volver a probar el script. El modo principal para trazar los errores más complicados es configurar varias opciones de shell. Para hacerlo, puede usar las opciones de línea de comando tras invocar a la shell o puede usar el comando set
. La siguiente tabla resume todas las opciones:
Puede activar los indicadores de opción set
usando -o
, y desactivarlo usando +o
, y de igual modo para las fórmulas abreviadas. Puede conseguir una pista de ejecución sencilla usando la opción xtrace
. Para una comprobación inicial, puede usar la opción de línea de comando, pero para una localización de errores más exacta, debe introducir los indicadores xtrace
(activando una pista de ejecución) en el script alrededor del código problemático. La pista de ejecución hace que la shell muestre todas las líneas del script, con las variables expandidas, antes de ejecutar la línea.
Use el siguiente comando para activar xtrace
:
set -o xtrace
Use este comando para desactivar xtrace
de nuevo:
set +o xtrace
El nivel de expansión lo define (por defecto) el número de señales + que se encuentra al principio de cada línea. Puede modificar el símbolo + por algo más significativo configurando la variable shell PS4 en su archivo de configuración shell.
En la shell, también puede descubrir el estado del programa, exista donde exista, reteniendo la señal EXIT
mediante la colocación, al principio del script, una línea similar a la que mostramos en el siguiente ejemplo:
trap `echo Existing: critical variable = $critical_variable' EXIT
Debe estar conectado para enviar un comentario.