Existem dois problemas:
- O script é executado em um subshell não interativo (de forma diferente no shell pai).
- O subshell não tem controle de trabalho.
Basta habilitar o controle de trabalho no subshell iniciando o script usando bash -m test.sh &
não funcionará, pois isso também significa que ele herdará todos os descritores de arquivo do shell pai. A primeira coisa que acontecerá quando você pressionar Enter é que o script será suspenso.
Em vez disso, vamos interpretar "periodicamente" como "toda vez que eu pressionar Enter para executar um novo comando".
Isso significa que podemos colocar a parte principal do script em PROMPT_COMMAND
. Se essa variável tiver um valor, ela será avaliada antes de emitir o próximo prompt.
PROMPT_COMMAND='jobs >/tmp/test/jobs'
Se executarmos sleep 100 &
depois disso no prompt e investigar /tmp/test/jobs
, veremos que ele contém
[1]+ Running sleep 100 &
Após 100 segundos, se nenhuma outra tarefa em segundo plano for iniciada, pressionar Enter atualizará o arquivo para conter
[1]+ Running sleep 100 &
[1]+ Done sleep 100
Após o próximo Enter , o arquivo estará vazio.