即使在命令返回或被杀死后,如何保持 window 打开?

How to keep the window opened even after the command returned or is killed?

我打开了一个独立的屏幕,运行 新的一些命令 windows:

screen -dm -S test
screen -S test -X screen -t htop htop
screen -S test -X screen -t top top
screen -S test -X screen -top dmesg dmesg -w

and also try

screen -dm -S test
screen -S test -x -X screen htop
screen -S test -x -X screen top
screen -S test -x -X screen dmesg -w

效果很好。当我重新连接屏幕 screen -r test 并使用 ctrl+c 终止 运行ning 应用程序时,window 同时关闭。

当通过 ctrl+a+c 手动创建新的 window 并且我在里面 运行 top/htop/whatever 时,如果我终止应用程序,window 会保留,我可以运行 新命令。

为什么?我怎么会有相同的行为?我希望能够在同一个 window.

中再次终止和 运行 命令

回答

你需要让屏幕知道你想要 shell 运行ning 在新的 window 中使用命令 运行ning 在那个 shell .完成此操作的最简单方法(据我所知)是创建 window 与 运行 中的命令分开创建:

screen -S session_name -X screen -t tab_name
screen -S session_name -p tab_name -X stuff "command_to_run \r"

示例:

screen -S test -X screen -t htop_tab
screen -S test -p htop_tab -X stuff "htop\r"

备注:

  • \r 用于模拟按下 return 键。
  • stuff 将让您与该 window
  • 中的任何 运行ning 进程进行交互

说明

手动方法与您使用的命令之间的区别是:

  • 当您手动创建一个新的 window 时,您正在创建一个带有交互式 shell 运行 的 window,然后您在其中键入一个命令shell 启动程序。当你杀死那个程序时,它会回到 shell 并且你可以做任何你想做的事情。
  • 另一方面,您的命令指示屏幕创建一个新的 window,其中包含提供的命令 运行ning(即不要 运行 a shell), 所以当你杀死它时, window 中没有进程 运行ning 并且它关闭

屏幕手册页的相关摘录:

默认键绑定部分:

  C-a c,             (screen)          Create a new window with
  C-a C-c                              a  shell  and  switch to
                                       that window.

内屏指令说明中:

If a command is specified after "screen", this command (with the given arguments) is started in the window; otherwise, a shell is created.