如何使后台作业始终在 Bash 中打印"完成"?



我注意到,有时后台作业不会打印Done,除非我按Enter

git gc为例,

git gc --force --prune=now &

输出类似

Enumerating objects: 574964, done.
Counting objects: 100% (574964/574964), done.
Delta compression using up to 4 threads
Compressing objects: 100% (156394/156394), done.
Writing objects: 100% (574964/574964), done.
Total 574964 (delta 296425), reused 574891 (delta 296375), pack-reused 0
Removing duplicate objects: 100% (256/256), done.
Checking connectivity: 574964, done.
Expanding reachable commits in commit graph: 87696, done.

直到我按下Enter,我才知道它是否真的结束了。如果结束,它会打印

[1]+  Done                    git gc --force --prune=now

如果我不按Enter或任何其他键,它似乎被冻结了,只是不打印";完成";好像它还在运行。

对于像echo hello &这样的简单后台作业;完成";紧接在CCD_ 7被打印之后。

[1] 17647
hello
[1]+  Done                    echo hello

我想知道是什么导致了不同的行为,以及我如何使其始终打印";完成";作业完成时自动执行。谢谢

根据man bash:

每当作业更改状态时,shell都会立即学习。通常,bash会等待,直到它要打印在报告作业状态的更改之前提示,以免中断任何其他输出。如果-b选项如果启用了set内置命令,bash会立即报告这些更改。

最新更新