2012-09-28 10 views
9

Typowy wiersz w bash w coś takiego:Pokaż liczba miejsc pracy w bash zapyta tylko jeśli niezerowe

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

puszki pokażesz liczby miejsc pracy w tle przy użyciu \j, np

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

Która jest przydatny, ponieważ od czasu do czasu zapominam, że mam zatrzymaną pracę i zauważam tylko, gdy narzeka, że ​​ręcznie wyloguję się z powłoki.

Jednak 95% czasu, liczba zleceń w tle wynosi 0 i wyświetlenie jej w monicie jest zbędne.

Jak wyświetlić liczbę zleceń w monicie, ale tylko wtedy, gdy jest niezerowa?

Odpowiedz

14

Możesz np. zrób coś takiego:

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

Zauważ, że to pokazuje zatrzymany i uruchomiony ** ** pracy (chociaż różnica może nie ma znaczenia do ciebie) – ashirley

2

Przyjęta odpowiedź nie działa dla mnie (Mam Bash v4.2.46). Zgłasza błąd tak:

[: \j: integer expression expected 

musiałem użyć PROMPT_COMMAND aby osiągnąć tę samą funkcjonalność:

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

Może to być spowodowane tym, że składnia komend '$()' została wprowadzona w Bash 4.3. Zamiast tego spróbuj '' 'PS1 = '\ u @ \ h: \ w' [\ j -gt 0] && echo [\ j] '\ $'' ''. – wjandrea

+0

@wjandrea Nie jestem ekspertem od Bash, ale wątpię w to. Nawet w "GNU bash, wersja 4.1.2 (1) -release" działa ta składnia. W żadnym z tutoriali Basha nie widziałem ostrzeżenia o składni $ (...). –

+0

huh, tak, jestem całkowicie w błędzie, przepraszam. – wjandrea

Powiązane problemy