我有两个 shell 脚本,比如说client.sh
和server.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然后d按D蚀刻。要重新连接并再次查看输出,请使用:
$ screen -x my-job
您还可以通过执行以下操作同时查看附加脚本的输出:
- 按Ctrl-A然后按s到S分裂你的观点。
- 按Ctrl-A然后按 向下Tab移动到下分割线
- Ctrl-A随后"打开活动终端列表,然后选择第 1 个终端(第 0 个终端默认连接到顶部拆分)。
答案2
您正在寻找的是 Bash 的作业控制。您可以通过man bash
搜索“JOB CONTROL”(/^JOB CONTROL
在 bash 手册页中输入) 来阅读所有相关内容。
尽管如此,command &
该命令仍应在后台运行。您可以使用jobs
bash 命令验证这一点。这将列出所有后台作业、作业编号和状态。
使用bg n
或%n &
可以恢复作业编号为 n 的已停止作业(例如 bg 5 恢复作业编号 5)。
使用fg n
or%n
可以让工作从后台回到前台。
希望这可以帮助。
答案3
使用 screen(1) 或 tmux(1) 之类的东西可以同时运行多个终端。您甚至可以注销并从其他地方重新获取它们。
在 Gnome 终端等中使用选项卡。
在 bash(1) 中使用作业控制(确保阅读信息文件的相关部分)来停止/后台/前台作业。