Torben Fjerdingstad (<tfj at fjerdingstad dot dk>) 写信告诉我,他经常停止作业,然后忘记它们。他使用提示符来提醒自己停止的作业。 显然,这非常流行,因为从 Bash 2.04 开始,有一个标准的转义序列用于 shell 管理的作业
[giles@zinfandel]$ export PS1='\W[\j]\$ ' giles[0]$ man ls & [1] 31899 giles[1]$ xman & [2] 31907 [1]+ Stopped man ls giles[2]$ jobs [1]+ Stopped man ls [2]- Running xman & giles[2]$ |
请注意,这会显示停止和正在运行的作业。 在控制台中,您可能需要完整的计数,但在 xterm 中,您可能只对停止的作业感兴趣。 要仅显示这些作业,您可以像下面这样使用
[giles@zinfandel]$ function stoppedjobs { -- jobs -s | wc -l | sed -e "s/ //g" -- } [giles@zinfandel]$ export PS1='\W[`stoppedjobs`]\$ ' giles[0]$ jobs giles[0]$ man ls & [1] 32212 [1]+ Stopped man ls giles[0]$ man X & [2] 32225 [2]+ Stopped man X giles[2]$ jobs [1]- Stopped man ls [2]+ Stopped man X giles[2]$ xman & [3] 32246 giles[2]$ sleep 300 & [4] 32255 giles[2]$ jobs [1]- Stopped man ls [2]+ Stopped man X [3] Running xman & [4] Running sleep 300 & |
这并不总是在命令执行后紧随其后的提示符中显示停止的作业 - 这可能取决于作业是否在 jobs 运行之前启动并放入后台。
![]() | Bash 2.02 中存在一个已知的错误,该错误导致 jobs 命令(一个 shell 内置命令)不会向管道返回任何内容。 如果您在 Bash 2.02 下尝试上述操作,无论您停止了多少作业,您都将始终获得“0”返回。 此问题已在 2.03 中修复。 |
相对速度:'jobs -s | wc -l | sed -e "s/ //g" ' 在未加载的 486SX25 上大约需要 0.24 秒。