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

3

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

#! /bin/bash
jobs -l

Mostra a saída vazia.

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

    
por user13107 19.05.2016 / 12:56

2 respostas

5

jobs

mostra os trabalhos gerenciados pelo shell atual . Seu script é executado dentro de seu próprio shell, então jobs somente mostrará os trabalhos gerenciados pelo shell do script ...

Para ver isso em ação, execute

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

Para ver informações sobre "jobs" iniciadas antes de um script de shell, dentro do script, você precisa tratá-las como processos regulares e usar ps etc. Você pode se limitar a processos iniciados pelo shell pai (o shell do qual o script foi iniciado, se houver) usando a variável $PPID dentro do script e procurando processos compartilhando o mesmo PID pai.

    
por 19.05.2016 / 13:04
0

Como Stephen disse, gerar uma nova shell provavelmente não é o que você quer fazer. Você precisa executar o código no shell atual .

Seu código funcionaria fazendo source myscript.sh ou declarando seu código em uma função (que pode estar no seu bashrc ou em um arquivo separado que é originado).

myfunction () {
  jobs -l
} 

Eu usei isso em meus arquivos de ponto , se você estiver interessado.

    
por 05.02.2017 / 05:58