Por ejemplo, tengo un archivo bash simple
#!/bin/bash
cd ~/hello
ls
¿Cómo puedo hacer que muestre cada comando antes de ejecutarlo? Justo el efecto opuesto de "@echo off" en las secuencias de comandos por lotes de Windows.
#!/bin/bash -x
Por ejemplo, tengo un archivo bash simple
#!/bin/bash
cd ~/hello
ls
¿Cómo puedo hacer que muestre cada comando antes de ejecutarlo? Justo el efecto opuesto de "@echo off" en las secuencias de comandos por lotes de Windows.
#!/bin/bash -x
Respuestas:
bash -x script
o
set -x
en el guion
Puede deshabilitar la opción nuevamente con set +x
. Si solo desea hacerlo para algunos comandos, puede usar una subshell: `(set -x; command1; command; ...;)
PS4
puede ajustar la solicitud de -x
. Por ejemplo: PS4='Line $LINENO @ $(date +%s.%N): ' bash -x script
( date
aunque lo ralentizará)
Estos también funcionan:
set -v
o
#!/bin/bash -v
Pero -v no imprime la cadena PS4 antes de cada línea de script y no rastrea los pasos de una declaración "for" (por ejemplo) individualmente. Hace eco de los comentarios, mientras que -x no.
Aquí hay un ejemplo de la salida usando -v:
#!/bin/bash -v
# this is a comment
for i in {1..4}
do
echo -n $i
done
1234echo
echo hello
hello
Aquí está el resultado del mismo script con -x:
+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo
+ echo hello
hello
Tenga en cuenta que incluí "echo -n" para agregar énfasis a las diferencias entre -v y -x. Además, -v es lo mismo que "-o detallado", pero este último parece no funcionar como parte de un shebang.
Hay algunas maneras.
#!/usr/bin/env bash -x
como la línea shebang.
La inclusión set -x
en el script en sí habilitará la funcionalidad mientras set +x
que la deshabilitará. Ambos métodos también funcionarán con el sh shell más portátil.
Si no recuerdo mal, Perl también tiene la opción -x.
va como
language -x script
idioma = python, perl, bash -x = script de operador = nombre de archivo
Espero eso ayude.
-x
no tiene nada que ver con hacer eco en Python
set
opciones, puede encontrarlas en esta página de manual .