为什么命令完成后此屏幕会话会退出?

为什么命令完成后此屏幕会话会退出?

我知道screen -dmS mysession command启动一个屏幕,启动一个命令并分离。当我们需要将标准输出重定向到文件时,这可以工作:(参见如何在屏幕中运行程序,将所有输出重定向到文件并分离

screen -dmS mysession bash -c 'ls > test.txt'      # simple example

然而最后,屏幕会话不会停留,我们不能这样做screen -r mysession,它不再存在于screen -ls.

问题:在一句话中,如何启动屏幕会话,启动命令,分离,将标准输出重定向到文件(例如> test.txt),但不会自动退出屏幕会话等结束了?

链接问题:如何防止“screen -dmS sessionName program.sh”在program.sh完成后消失?

答案1

使用“bash -c”会产生非交互式 shell。您正在创建一个进程树,如下所示:

screen───bash───ls

完成后lsbash没有进一步的处理,也没有进一步的输入,也完成。

就此screen结束。

要执行您想做的操作,您需要首先启动交互式 shell。

screen -dmS session bash

然后使用 screen 命令将命令输入到 screen 会话中stuff

screen -S session -p 0 -X stuff "ls > test.txt^M"

^M行为就像换行符一样。

之后您需要使用exit^M或类似的命令退出外壳程序。

之后您可以将所有内容组合成一行 IE

screen -dmS session bash && screen -S session -p 0 -X stuff "ls > test.txt^M"

老实说,我认为对于您想要做的事情,最好screen完全避免并否认您想要进行的任何过程。

ls > test.txt & disown %1

这将做同样的事情,而不需要所有额外的齿轮。

相关内容