Почему команда jobs не работает в скрипте оболочки?

Почему команда jobs не работает в скрипте оболочки?

Если я запускаю jobs -lв командной строке, она показывает мне состояние запущенных заданий, но если я запускаю ниже файл ./tmp.sh

#! /bin/bash
jobs -l

Показывает пустой вывод.

Почему так происходит и как я могу получить информацию о статусе конкретной задачи внутри скрипта оболочки?

решение1

jobs

показывает работууправляется текущей оболочкой. Ваш скрипт работает внутри собственной оболочки, поэтому jobsбудут показаны только задания, управляемые оболочкой скрипта...

Чтобы увидеть это в действии, запустите

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

Чтобы увидеть информацию о «заданиях», запущенных до сценария оболочки, внутри сценария, вам нужно обращаться с ними как с обычными процессами и использовать psи т. д. Вы можете ограничиться процессами, запущенными родительской оболочкой (оболочкой, из которой был запущен сценарий, если таковая имеется), используя переменную $PPIDвнутри сценария и выполняя поиск процессов, имеющих одинаковый родительский PID.

решение2

Как сказал Стивен, создание новой оболочки, вероятно, не то, что вы хотите сделать. Вам нужно запустить код втекущая оболочка.

Ваш код будет работать, если вы выполните source myscript.shили объявите свой код вфункция(который может находиться в вашем bashrc или в отдельном файле, который находится в исходном коде).

myfunction () {
  jobs -l
} 

Я использовал это вмои dotfiles, если вы заинтересованы.

Связанный контент