Shell sh屏幕-等待屏幕终止

Shell sh屏幕-等待屏幕终止,shell,wait,gnu-screen,terminate,Shell,Wait,Gnu Screen,Terminate,我正在编写一个小脚本,它确实向正在运行的屏幕会话发送命令。此命令会停止屏幕,但不会立即停止。我需要等待它完成,以便继续脚本的其余部分 这是我停止屏幕的方式: screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop\r"`" 如何执行此操作?对于*nix系统,您可以在shell脚本中使用wait命令wait也可以采用PID,因此您可以执行wait$等待在后台运行最后一个执行的命令。如果您的命令没有在后台运行(命令末尾没有&),则运行脚本将等待该命令

我正在编写一个小脚本,它确实向正在运行的屏幕会话发送命令。此命令会停止屏幕,但不会立即停止。我需要等待它完成,以便继续脚本的其余部分

这是我停止屏幕的方式:

screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop\r"`"

如何执行此操作?

对于
*nix
系统,您可以在shell脚本中使用
wait
命令
wait
也可以采用
PID
,因此您可以执行
wait$
等待在后台运行最后一个执行的命令。如果您的命令没有在后台运行(命令末尾没有
&
),则运行脚本将等待该命令完成

我找到了解决方案:

您只需检查屏幕是否仍在运行,然后等待(
sleep
)一秒钟

像这样:

while screen -list | grep -q $SCREEN_NAME
do
    sleep 1
done

如果重新连接screen会话,它将自动等待,直到其中的所有进程都完成。如果您尝试重新连接到已完成的会话,它将立即出错


如果你想在“无头”模式下运行,那么头脑风暴者的答案就足够了。只需确保会话的名称是唯一的(
$SCREEN\u name
)。类似于
SCREEN\u NAME=$(date+my\u SCREEN\u thing.+%H%M%S)
的内容可以在其上获取时间戳。

这不起作用!程序只是运行通过,并不等待它结束!您是否尝试过
wait
wait$?尝试在后台运行脚本:将
&
添加到命令末尾,然后使用
等待
。试试看,关键是命令
screen-S$screen\u NAME-p0-X stuff“`printf”stop\r”`
基本上立即返回。它只是将命令发送到屏幕,然后转到下一个命令,而不是等待屏幕终止。如果我将
&
放在命令的末尾,然后使用wait,这将在上一个命令将命令发送到屏幕时继续。屏幕和屏幕的所有子进程不是启动它们的shell的子进程。因此,
wait
wait$无法工作
wait
仅适用于shell的子级,即使您将进程id指定为
wait
。是否有方法获取退出代码?试图使用screen并行一些测试。@LeblancMeneses因为你不是在等待屏幕,而是在等待它消失,所以用这种方法是不可能的。