Inicie su script bash con bash -x ./script.sh
o agregue su script set -x
para ver la salida de depuración.
Adicional con bash
4.1 o posterior:
Si desea escribir la salida de depuración en un archivo separado, agregue esto a su script:
exec 5> debug_output.txt
BASH_XTRACEFD="5"
Ver: https://stackoverflow.com/a/25593226/3776858
Si desea ver los números de línea agregue esto:
PS4='$LINENO: '
Si tiene acceso al
logger
comando, puede usar esto para escribir la salida de depuración a través de su registro del sistema con la marca de tiempo, el nombre del script y el número de línea:
#!/bin/bash
exec 5> >(logger -t $0)
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x
# Place your code here
Puede usar la opción -p
de logger
comando para establecer una instalación y un nivel individuales para escribir la salida a través de syslog local en su propio archivo de registro.
BASH_XTRACEFD="5"
bash, escribe la salida de rastreo generada cuandoset -x
está habilitada para el descriptor de archivo 5.exec 5> >(logger -t $0)
redirige la salida del descriptor de archivo 5 allogger
comando.Utilizando
set -x
Yo siempre uso
set -x
yset +x
. Puede ajustar las áreas que desea ver qué sucede con ellas para aumentar o disminuir la verbosidad.log4bash
Además, si ha realizado un trabajo de desarrollo y está familiarizado con el estilo de los registradores que llevan los nombres log4j, log4perl, etc., es posible que desee utilizar log4bash .
extractoDesde allí puede hacer cosas como esta en sus scripts de Bash:
Resultando en este tipo de salida:
log4sh
Si necesita algo más portátil, también está el más antiguo
log4sh
. Funciona de manera similar alog4bash
, disponible aquí:fuente
alias say="spd-say"
en mi .bashrc, que imita elsay
comando de otras distribuciones u OS X.Hay un depurador bash, bashdb , que es un paquete instalable en muchas distribuciones. Utiliza el modo de depuración extendida incorporado de bash (
shopt -s extdebug
). Se parece mucho a gdb; Aquí hay una sesión de muestra para darle un poco de sabor:Como en gdb, la declaración se muestra justo antes de que se ejecute. Entonces podemos examinar las variables para ver qué hará la declaración antes de que lo haga.
Eso no es lo que queremos! Veamos nuevamente la expansión de parámetros.
OK, eso funciona. Vamos a establecer
newf
el valor correcto.Se ve bien. Continuar el guión.
fuente
El método estándar para depurar scripts en la mayoría de los shells basados en Bourne, como bash, es escribir
set -x
en la parte superior de su script. Esto hará que bash sea más detallado sobre lo que se está haciendo / ejecutando y cómo se evalúan los argumentos.Esto es útil para el intérprete o los guiones internos. Por ejemplo:
En lo anterior podemos ver por qué find falla debido a algunas comillas simples.
Para desactivar la función, simplemente escriba
set +x
.fuente
Usando Eclipse
Puede usar el entorno combinado de Eclipse y Shelled con el script "_DEBUG.sh" vinculado a continuación.
http://sourceforge.net/projects/shelled/files/shelled/update/
http://sourceforge.net/projects/basheclipse/
Conchas de cambio
De forma predeterminada, la herramienta de desarrollo Shelled se usa
/bin/dash
como intérprete. Cambié esto para/bin/bash
tener una mejor compatibilidad con la mayoría de los ejemplos de shell en la web y mi entorno.NOTA: Puede cambiar esto yendo a: Ventana -> Preferencia -> Script de Shell -> Intérpretes
Instrucciones de instalación
El paquete Debugger tiene los pasos para usar el
_DEBUG.sh
script para la depuración de su script, que es básicamente (el archivo readme.txt):La interfaz de usuario de depuración de bash
Este depurador bash tiene las características completas de los depuradores de programación estándar como:
El IDE (entorno de desarrollo integrado) descascarado (Shell Script Editor) tiene una ventaja adicional de realizar comprobaciones de contexto, resaltar y sangrar mientras escribe su script. Si no sangra correctamente, es posible que pueda marcar / localizar de inmediato muchos errores allí.
Luego hay otros beneficios IDE como:
fuente
Un recurso maravilloso apareció en los últimos años: http://shellcheck.net
le muestra más de lo que lo hace el bash regular, lo que le permite encontrar fácilmente esas molestas comillas no cerradas o llaves, etc.
Solo asegúrese de no pegar información confidencial (ips, contraseñas, etc.) en la red ... (especialmente porque es http, sin cifrar) (creo que Shellcheck también está disponible para descargar, pero no estoy seguro)
fuente
simplemente use:
Lo mismo para Shell:
fuente
Hoy en día, existe la depuración VS Code Bash.
https://marketplace.visualstudio.com/items?itemName=rogalmic.bash-debug
Tiene 'Entrada / salida / sobre' y también muestra el valor de cada variable.
fuente