zsh prompt — проверка наличия фоновых заданий

Я настраиваю приглашение zsh и обнаружил следующее, чтобы проверить, есть ли какие-либо фоновые задания:

if [[ $(jobs | wc -l) -gt 0 ]]; then # has background job(s)
    number_jobs='J:${cyan}%j${no_color}'
else # no background job(s)
    number_jobs=""
fi

Проблема, с которой я столкнулся, заключается в том, что код оценивается только тогда, когда я открываю новый сеанс, а не после каждой команды, что делает это довольно бесполезным. Как я могу переоценивать number_jobs после каждой команды?


person Chauncey Garrett    schedule 17.04.2012    source источник


Ответы (1)


zsh имеет специальную последовательность подсказок, например тернарный оператор C. Следующая конструкция означает, что если есть одно или несколько заданий, то выведите их количество или ничего не выведите:

 %(1j.%j.)
person yazu    schedule 17.04.2012
comment
Указывает ли часть 1j, есть ли одна работа или есть более одной работы? (извините за мое незнание C, я новичок во всем этом) - person Chauncey Garrett; 17.04.2012
comment
любое количество заданий (1, 2, больше) - person yazu; 17.04.2012
comment
Просто для справки для таких людей, как я, которые хотели бы найти документы: и %(...), и %j можно найти в man zshmisc, в расширении раздела последовательностей подсказок (троичная операция находится в условных подстроках в подразделе подсказок). - person dvk; 12.06.2018