Por que o comando jobs não funciona no shell script?

Por que o comando jobs não funciona no shell script?

Se eu executar jobs -lno prompt de comando, ele me mostrará o status dos trabalhos em execução, mas se eu executar o arquivo abaixo ./tmp.sh

#! /bin/bash
jobs -l

Mostra saída vazia.

Por que isso acontece e como posso obter informações sobre o status de um trabalho específico dentro de um script de shell?

Responder1

jobs

mostra os empregosgerenciado pelo shell atual. Seu script é executado dentro de seu próprio shell, portanto, jobsserão exibidos apenas trabalhos gerenciados pelo shell do script...

Para ver isso em ação, execute

#!/bin/bash
sleep 60 &
jobs -l

Para ver informações sobre "trabalhos" iniciados antes de um script de shell, dentro do script, você precisa tratá-los como processos regulares e usar psetc. Você pode limitar-se a processos iniciados pelo shell pai (o shell a partir do qual o script foi iniciado , se houver) usando a $PPIDvariável dentro do script e procurando processos que compartilhem o mesmo PID pai.

Responder2

Como Stephen disse, gerar um novo shell provavelmente não é o que você deseja fazer. Você tem que executar o código noshell atual.

Seu código funcionaria fazendo source myscript.shou declarando seu código em umfunção(que pode estar no seu bashrc ou em um arquivo separado de origem).

myfunction () {
  jobs -l
} 

Eu usei isso emmeus arquivos de ponto, se você está interessado.

informação relacionada