我正在编写一个向正在运行的屏幕会话发送命令的小脚本。此命令会停止屏幕,但不会立即停止。我需要等待它完成才能继续脚本的其余部分。
这就是我停止屏幕的方式:
screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop\r"`"
我怎么能这样做?
我正在编写一个向正在运行的屏幕会话发送命令的小脚本。此命令会停止屏幕,但不会立即停止。我需要等待它完成才能继续脚本的其余部分。
这就是我停止屏幕的方式:
screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop\r"`"
我怎么能这样做?
我找到了一个解决方案:
您只需检查屏幕是否仍在运行并等待 ( sleep
) 一秒钟。
像这样:
while screen -list | grep -q $SCREEN_NAME
do
sleep 1
done
对于*nix
系统,您可以wait
在 shell 脚本中使用该命令。wait
也可以采用PID
,因此您可以wait $!
等待在后台运行的最后一个执行命令。如果您的命令未在后台运行(&
命令末尾没有),则运行脚本将等到该命令完成
如果您重新附加屏幕会话,那么它将自动等待,直到完成其中的所有进程。如果您尝试重新连接到已经完成的会话,它会立即出错。
如果你想在“无头”模式下运行,那么 BrainStone 的回答就足够了。只需确保以$SCREEN_NAME
唯一的方式命名您的会话 ( )。像SCREEN_NAME=$(date +my_screen_thing_+%H%M%S)
得到一个时间戳的东西。