Si ejecuto jobs -l
en el símbolo del sistema, me muestra el estado de los trabajos en ejecución, pero si ejecuto debajo del archivo ./tmp.sh
#! /bin/bash
jobs -l
Muestra una salida vacía.
¿A qué se debe esto y cómo puedo obtener información sobre el estado de un trabajo en particular dentro de un script de Shell?
Respuesta1
jobs
muestra los trabajosgestionado por el shell actual. Su script se ejecuta dentro de su propio shell, por lo que jobs
solo mostrará trabajos administrados por el shell del script...
Para ver esto en acción, ejecute
#!/bin/bash
sleep 60 &
jobs -l
Para ver información sobre los "trabajos" iniciados antes de un script de shell, dentro del script, debe tratarlos como procesos normales, y su uso, ps
etc. Puede limitarse a los procesos iniciados por el shell principal (el shell desde el que se inició el script). , si corresponde) utilizando la $PPID
variable dentro del script y buscando procesos que compartan el mismo PID principal.
Respuesta2
Como dijo Stephen, generar un nuevo caparazón probablemente no sea lo que quieras hacer. Tienes que ejecutar el código en elcaparazón actual.
Su código funcionaría ya sea haciendo source myscript.sh
o declarando su código en unfunción(que podría estar en su bashrc o en un archivo separado de origen).
myfunction () {
jobs -l
}
Usé esto enmis archivos de puntos, si estás interesado.