Un colega me presentó recientemente bash -x
para depurar mis scripts bash sin tomar la ruta echo $foo
.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Internamente, ¿cómo logra bash esto? Revisé man bash
y (¿no parecía?) Mencionaba la marca -x
al invocar al intérprete. Estoy buscando principalmente una descripción general de lo que se depurará y no se depurará en el -x
entorno, o cualquier otro error.
Respuesta
-x
es lo mismo que configurar xtrace
con -o
para bash. De mi copia de la página de manual de bash:
Después de expandir cada comando simple , para comando, case comando, seleccione el comando o aritmética para comando, muestra el valor expandido de PS4 , seguido del comando y su argumento expandido ts o lista de palabras asociadas.
No creo que haya muchos «errores» con esto: imprime cada comando que ejecuta. Supongo que si «estás analizando la stderr
salida del script de shell, esto puede estropearlo, porque los comandos se imprimen en stderr
(también conocido como descriptor de archivo 2), pero eso parece un caso extremo.
(También puede habilitarlo condicionalmente dentro de scripts o en sesiones de shell interactivas con set -x
para enciéndalo y set +x
para apagarlo nuevamente.)
set help
solo dice-x Print commands and their arguments as they are executed.
. No pude ' encontrar algo sobre cómo desarmar eso en el shell actual.set help
establece los parámetros posicionales en la palabrahelp
y no ' t genera nada.help set
da una línea más o menos para cada opción, incluida la que muestra para-x
en mi versión (anterior) y en t El final de esa lista diceUsing + rather than - causes these flags to be turned off.