如何使用一个终端处理多个交互式作业而不停止它们?

如何使用一个终端处理多个交互式作业而不停止它们?

我有两个 shell 脚本,比如说client.shserver.sh,它们必须同时工作并以watch-way 的方式提供一些有用的输出。
而且我只能使用一台终端。所以我应该在它们之间切换以查看发生了什么,但不要停止它们(Ctrl+ Z)。
我不知道该怎么做。
当我跑步时

./server.sh &

然后输入Enter终端(在启动之前)客户端.sh),但它显示

[1]+ Stopped                   ./server.sh

是否有一种方便的方法可以在终端中的作业之间切换以查看其输出(内部状态)而不停止它们?

答案1

使用screen

$ screen -S my-job

这将启动一个screen名为“my-job”的新会话并连接到它。

$ ./server.sh

server.sh这将在附加到会话的第一个(默认)终端上启动您的脚本screen。现在按Ctrl-A然后按Ctrl- C。这会C创建一个新终端并切换到它。现在你可以运行:

$ ./client.sh

并观察其输出。要来回切换,请按Ctrl-,A然后再次按Ctrl- A

要在screen程序仍运行的情况下断开连接,请按Ctrl-,A然后dD蚀刻。要重新连接并再次查看输出,请使用:

$ screen -x my-job

您还可以通过执行以下操作同时查看附加脚本的输出:

  • Ctrl-A然后按sS分裂你的观点。
  • Ctrl-A然后按 向下Tab移动到下分割线
  • Ctrl-A随后"打开活动终端列表,然后选择第 1 个终端(第 0 个终端默认连接到顶部拆分)。

答案2

您正在寻找的是 Bash 的作业控制。您可以通过man bash搜索“JOB CONTROL”(/^JOB CONTROL在 bash 手册页中输入) 来阅读所有相关内容。

尽管如此,command &该命令仍应在后台运行。您可以使用jobsbash 命令验证这一点。这将列出所有后台作业、作业编号和状态。

使用bg n%n &可以恢复作业编号为 n 的已停止作业(例如 bg 5 恢复作业编号 5)。

使用fg nor%n可以让工作从后台回到前台。

希望这可以帮助。

答案3

使用 screen(1) 或 tmux(1) 之类的东西可以同时运行多个终端。您甚至可以注销并从其他地方重新获取它们。

在 Gnome 终端等中使用选项卡。

在 bash(1) 中使用作业控制(确保阅读信息文件的相关部分)来停止/后台/前台作业。

相关内容