我知道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
完成后ls
,bash
没有进一步的处理,也没有进一步的输入,也完成。
就此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
这将做同样的事情,而不需要所有额外的齿轮。