
Se eu executar jobs -l
no 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, jobs
serã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 ps
etc. Você pode limitar-se a processos iniciados pelo shell pai (o shell a partir do qual o script foi iniciado , se houver) usando a $PPID
variá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.sh
ou 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.