2012-09-28 22 views
9

在bash典型提示符是这样的:显示作业计数提示只有当非零

PS1="\[email protected]\h:\w\$ " 

的可以显示使用\j的后台作业的数量,例如:

PS1="\[email protected]\h:\w [\j]\$ " 

哪是有用的,因为我偶尔会忘记我有一个停止的工作,只有当我手动从shell注销时发出抱怨时才会注意。

但是,95%的时间,后台作业计数为0,并在提示符中显示它是多余的。

如何在提示中显示作业计数,但仅在非零时才显示作业计数?

回答

14

您可以做这样的事情:

PS1='\[email protected]\h:\w $([ \j -gt 0 ] && echo [\j])\$ ' 
+0

注意,这表明停止**和**运行作业(虽然区别可能并不重要给你) – ashirley

2

接受的答案不适用于我(我有Bash v4.2.46)。它抛出这样的错误:

[: \j: integer expression expected 

我不得不用PROMPT_COMMAND来实现相同的功能:

export PROMPT_COMMAND=__prompt_command 
function __prompt_command() { 
    local JOBS=$(jobs | wc -l | tr -d 0) 
    PS1="\[email protected]\h:\w [${JOBS}]\$ " 
} 
+0

这可能是因为'$()'命令替换语法是在Bash 4.3中引入的。试试'''PS1 ='\ u @ \ h:\ w'[\ j -gt 0] && echo [\ j]'\ $''''代替。 – wjandrea

+0

@wjandrea我不是Bash专家,但我怀疑它。即使在“GNU bash,版本4.1.2(1) - 释放”这个语法的作品。我没有看到任何Bash教程对$(...)语法的一些警告。 –

+0

呵呵,是的,我完全错了,对不起。 – wjandrea