Si ingreso la opción bash -x , mostrará toda la línea. Pero el script se ejecutará normalmente.
¿Cómo puedo ejecutar línea por línea? Entonces puedo ver si hace lo correcto, o aborto y soluciono el error. Se pone el mismo efecto readen cada línea.
Si ingreso la opción bash -x , mostrará toda la línea. Pero el script se ejecutará normalmente.
¿Cómo puedo ejecutar línea por línea? Entonces puedo ver si hace lo correcto, o aborto y soluciono el error. Se pone el mismo efecto readen cada línea.
Respuestas:
No necesita poner una lectura en cada línea, solo agregue una trampa como la siguiente en su script bash, tiene el efecto que desea, por ejemplo.
#!/usr/bin/env bash
set -x
trap read debug
< YOUR CODE HERE >
Funciona, solo lo probé con bash v4.2.8 y v3.2.25.
VERSIÓN MEJORADA
Si su secuencia de comandos está leyendo contenido de archivos, la lista anterior no funcionará. Una solución alternativa podría parecerse al ejemplo siguiente.
#!/usr/bin/env bash
echo "Press CTRL+C to proceed."
trap "pkill -f 'sleep 1h'" INT
trap "set +x ; sleep 1h ; set -x" DEBUG
< YOUR CODE HERE >
Para detener el script, tendría que matarlo desde otro shell en este caso.
ALTERNATIVA1
Si simplemente desea esperar unos segundos antes de continuar con el siguiente comando en su secuencia de comandos, el siguiente ejemplo podría funcionar para usted.
#!/usr/bin/env bash
trap "set +x; sleep 5; set -x" DEBUG
< YOUR CODE HERE >
Estoy agregando set + x y set -x dentro del comando trap para que la salida sea más legible.
trap 'read -u1' debugpara anular el problema de redirección de lectura de archivos.
Quizás el depurador BASH sea algo para ti.
apt-get install bashdb. Entonces solo necesita ejecutar bashdb your_command.sh, escribir stepy luego presionar retorno de carro después de eso.
brew install bashdb
Si su script bash es realmente un grupo de comandos únicos que desea ejecutar uno por uno, puede hacer algo como esto, que ejecuta cada comando uno por uno cuando incrementa una variable LN, correspondiente al número de línea que desea ejecutar . Esto le permite ejecutar el último comando nuevamente de manera muy fácil, y luego simplemente incrementar la variable para ir al siguiente comando.
Suponiendo que sus comandos están en un archivo "it.sh", ejecute lo siguiente, uno por uno.
$ cat it.sh
echo "hi there"
date
ls -la /etc/passwd
$ $(LN=1 && cat it.sh | head -n$LN | tail -n1)
"hi there"
$ $(LN=2 && cat it.sh | head -n$LN | tail -n1)
Wed Feb 28 10:58:52 AST 2018
$ $(LN=3 && cat it.sh | head -n$LN | tail -n1)
-rw-r--r-- 1 root wheel 6774 Oct 2 21:29 /etc/passwd
Eche un vistazo a bash-stepping-xtrace .
Permite pisar xtrace.