Configure PS1 com base no número de jobs

1

Do manual do Bash (Controlando o Prompt) 1 ):

\j the number of jobs currently managed by the shell.  

\$ If the effective uid is 0, #, otherwise $.

O que eu gostaria de é definir PS1 para

[some-string] $

quando não há empregos; e

[some-string]2 $

quando há 2 trabalhos.

Como consegui isso?

Se possível, a solução poderia ser simples, com apenas expansões básicas de Bash e possivelmente Bash builtins.

    
por qeatzy 26.05.2018 / 13:01

1 resposta

2

Eu não acho que o Bash suporte condicionais no prompt (como, por exemplo, screen , IIRC), mas você poderia usar a substituição de comando com \j para adicionar alguma lógica sobre ele.

anyjobs() { [[ "$1" != 0 ]] && echo "[ $1 bg job(s) ] "; }
PS1='$? $(anyjobs \j)\u@\h \w\$ '

Isso executa um subshell, que envolve um fork() no Bash, mas não consigo ver uma maneira de contornar isso.

Em geral, você poderia evitar o subshell definindo uma variável em PROMPT_COMMAND , mas não consigo ver uma maneira simples de obter o número de trabalhos lá.

    
por 26.05.2018 / 13:13

Tags