2012-09-28 39 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