Saltar al contenido

¿Cómo detener el script bash de bucle en la terminal?

La guía o código que hallarás en este artículo es la solución más rápida y válida que encontramos a tu duda o problema.

Solución:

  1. imprenta Ctrl-Z para suspender el guión
  2. kill %%

El %% le dice al bash incorporado kill que desea enviar una señal (SIGTERM de forma predeterminada) al trabajo en segundo plano suspendido más recientemente en el shell actual, no a un ID de proceso.

También puede especificar trabajos por número o por nombre. por ejemplo, cuando suspende un trabajo con ^Z, bash le dirá cuál es su número de trabajo con algo como [n]+ Stoppeddonde el n dentro de los corchetes está el número de trabajo.

Para obtener más información sobre el control de trabajos y la eliminación de trabajos, ejecute help jobs, help fg, help bgy help kill en bash, y busque JOB CONTROL (todo en mayúsculas) o jobspec en la página de manual de bash.

p.ej

$ ./killme.sh 
./killme.sh: line 4: sl: command not found
./killme.sh: line 4: sl: command not found
./killme.sh: line 4: sl: command not found
./killme.sh: line 4: sl: command not found
./killme.sh: line 4: sl: command not found
...
...
...
./killme.sh: line 4: sl: command not found
^Z
[1]+  Stopped                 ./killme.sh
$ kill %%
$ 
[1]+  Terminated              ./killme.sh

En este ejemplo, el número del trabajo era 1, por lo que kill %1 hubiera funcionado igual que kill %%

(NOTA: no tengo sl instalado por lo que la salida es simplemente “comando no encontrado”. en su caso, obtendrá cualquier salida que produzca sl. no es importante – el ^Z suspender y kill %% funcionará igual)

El programa sl ignora deliberadamente SIGINTque es lo que se envía cuando presionas Ctrl + C. Así que, en primer lugar, tendrá que decirle sl no ignorar SIGINT agregando el -e argumento.

Si intenta esto, notará que puede detener a cada individuo sl, pero aún así repiten. tienes que decir bash salir después SIGINT también. Puedes hacer esto poniendo un trap "exit" INT antes del bucle.

#!/bin/bash
trap "exit" INT
while :
do
    sl -e
done

Si desea que ctrl+c detenga el ciclo, pero no termine el script, puede colocar || break después de cualquier comando que esté ejecutando. Siempre que el programa que está ejecutando finalice con ctrl+c, esto funciona muy bien.

#!/bin/bash
while :
do
    # ctrl+c terminates sl, but not the shell script
    sl -e || break
done

Si está en un bucle anidado, puede usar “romper 2” para salir de dos niveles, etc.

Si haces scroll puedes encontrar las anotaciones de otros creadores, tú igualmente puedes insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *