На странице руководства bash написано:
В выходных данных, относящихся к заданиям (например, в выходных данных команды jobs), текущее задание всегда помечается знаком +, а предыдущее задание — знаком -. Одиночный % (без сопутствующей спецификации задания) также относится к текущему заданию.
В моей серии команд, приведенной ниже, последа 2 > /dev/null &Я ожидал, что работа [2] будет текущей работой, а не работой [1].
Также в конце командыда 3 > /dev/null &Я ожидал, что вывод команды jobs будет таким:
[1] Остановлено
[2]- Работает
[3]+ Работает
что я упускаю?
$ yes 1 > /dev/null
^Z
[1]+ Stopped yes 1 > /dev/null
$ jobs
[1]+ Stopped yes 1 > /dev/null
$ yes 2 > /dev/null &
[2] 3082
$ jobs
[1]+ Stopped yes 1 > /dev/null
[2]- Running yes 2 > /dev/null &
$ yes 3 > /dev/null &
[3] 3116
$ jobs
[1]+ Stopped yes 1 > /dev/null
[2] Running yes 2 > /dev/null &
[3]- Running yes 3 > /dev/null &
решение1
Из той же страницы руководства:
[…] текущее задание, т. е. последнее задание, остановленное на переднем плане или запущенное в фоновом режиме.
Это несколько двусмысленно. Вы можете понять это как:
- Возьмите все «задания, остановленные на переднем плане или запущенные в фоновом режиме»…
- …затем выберите «последний».
Но этоскорее:
- Возьмем «последнюю работу, остановленную, когда она была на переднем плане»;
- но если такой задачи нет, возьмите «последнюю задачу, запущенную в фоновом режиме».