![在 shell 之间共享后台作业](https://linux22.com/image/31710/%E5%9C%A8%20shell%20%E4%B9%8B%E9%97%B4%E5%85%B1%E4%BA%AB%E5%90%8E%E5%8F%B0%E4%BD%9C%E4%B8%9A.png)
我用屏幕里面有很多(超过 10 个)本地 Bash 会话。我vi file
经常将一些进程(例如 )发送到后台并在会话之间切换,有时找出我要编辑的文件已经在哪里打开是非常烦人的。
有没有办法共享此类后台进程,以便能够从此屏幕内的任何 Bash 会话访问它?
答案1
不,文档为bash 作业控制没有提到对不同 bash 会话之间共享或采用作业的任何支持。
然而,雷普特尔将允许您控制在另一个会话中后台运行的作业,这可能足够接近您想要的。
reptyr 需要您要接管的作业的 pid,因此您必须首先找到该 pid。您可以自己决定这是否比仅仅查找原始屏幕窗口需要更多工作。
听起来你最感兴趣的是用 vim 来做这件事(是的,你说的是 vi,但我假设 vim 就是你在后台运行的东西)。 vim -r
将为您提供所有打开的 vim 会话的列表,以及它们正在编辑的文件。阅读列表,找到正在使用所需文件的 pid,然后运行reptyr <pid>
.
彻底地说,vim 不会阻止您编辑已经在其他地方打开的文件 - 使用vim -r <filename>
- 但请记住在:e
返回原始会话时再次重新加载该文件,以便您的新编辑会应用到最新版本。 vim 会在某些事件上提醒你这一点。
答案2
我想你的问题的解决方案在别处:你应该编写一个脚本来显示所有后台进程和相应的screen
窗口。
如果这是您的选择,我会建议一些代码。