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:
- imprenta
Ctrl-Z
para suspender el guión 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]+ Stopped
donde 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 bg
y 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 SIGINT
que 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.