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