根据作业数量设置PS1

根据作业数量设置PS1

来自 Bash 手册(控制提示符)1):

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

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

我想要什么是设置PS1

[some-string] $

当没有工作的时候;和

[some-string]2 $

当有 2 个工作时。

我怎样才能做到这一点?

如果可能的话,解决方案可以很简单,只需要基本的 Bash 扩展和可能的 Bash 内置函数。

答案1

我认为 Bash 不支持提示中的条件(例如screen,IIRC),但您可以使用命令替换来\j添加一些逻辑。

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

这确实运行了一个子 shell,其中涉及fork()Bash 中的 a,但我看不到解决这个问题的方法。

一般来说,您可以通过在 中设置变量来避免子 shell PROMPT_COMMAND,但我看不到一种简单的方法来获取那里的作业数量。

相关内容