zsh提示符 - 检查是否有任何后台作业

18

我正在自定义我的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在每个命令后重新评估?

1个回答

36

zsh有一个特殊的提示序列,类似于C三目运算符。下面这个结构的意思是:如果存在一个或多个作业,则打印它们的数量,否则不打印任何内容:

%${#jobstates} >0 ? '%j ' : ''
 %(1j.%j.)

1j 部分是指“如果有一个工作”还是“如果有多个工作”?(请原谅我对 C 不了解,我对这一切都很新) - Chauncey Garrett
任意数量的工作(1、2个或更多) - yazu
6
仅供像我这样想查找文档的人参考:% (...)%j都可以在man zshmisc中的“提示序列扩展”部分找到(三元操作符在“提示中的条件子字符串”子部分中)。 - dvk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接