2012-09-28 8 views
9

Un mensaje típico en bash en algo así como:Mostrar recuento de trabajos en bash mensaje sólo si no es cero

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

El puede mostrar el número de trabajos en segundo plano usando \j, por ejemplo:

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

Qué es útil, porque de vez en cuando me olvido de que tengo un trabajo detenido y solo noto cuando se queja si cierro la sesión manualmente desde el shell.

Sin embargo, el 95% de las veces, el recuento de trabajos en segundo plano es 0 y mostrarlo en el aviso es superfluo.

¿Cómo puedo mostrar el recuento de trabajos en el aviso, pero solo si no es nulo?

Respuesta

14

Puede p. Ej. haga algo como esto:

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

Tenga en cuenta que esto demuestra detuvo ** ** puestos de trabajo y en funcionamiento (aunque la distinción no podría ser importante para usted) – ashirley

2

La respuesta aceptada no funciona para mí (tengo Bash v4.2.46). Se lanza un error como este:

[: \j: integer expression expected 

que tuvo que usar PROMPT_COMMAND para lograr la misma funcionalidad:

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

Podría ser porque la sintaxis de sustitución del comando '$()' se introdujo en Bash 4.3. Pruebe '' 'PS1 = '\ u @ \ h: \ w' [\ j -gt 0] && echo [\ j] '\ $'' ''en su lugar. – wjandrea

+0

@wjandrea No soy experto en Bash, pero lo dudo. Incluso en "GNU bash, versión 4.1.2 (1) -release" esta sintaxis funciona. No he visto en ningún tutorial Bash alguna advertencia sobre la sintaxis $ (...). –

+0

eh, sí, estoy totalmente equivocado, lo siento. – wjandrea

Cuestiones relacionadas