来自 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
,但我看不到一种简单的方法来获取那里的作业数量。