¿Por qué el comando jobs no funciona en el script de shell?

¿Por qué el comando jobs no funciona en el script de shell?

Si ejecuto jobs -len 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 jobssolo 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, psetc. Puede limitarse a los procesos iniciados por el shell principal (el shell desde el que se inició el script). , si corresponde) utilizando la $PPIDvariable 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.sho 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.

información relacionada