在 Raspbian 中编写“屏幕”脚本

在 Raspbian 中编写“屏幕”脚本

我读过很多不同的链接,例如:

这些似乎都在说同样的事情。我已经尝试了大多数适用的选项,但不知道我做错了什么。

目前,我正在手动加载脚本,以免引入任何其他可能的问题。

Filename="startup.sh" - 我使用包含以下内容的 sh 文件在启动时创建一个屏幕:

#!/bin/sh
screen -dmS megadl

这样可行。

Filename="start.sh" - 我创建此文件来加载分离的屏幕并运行另一个脚本。

#!/bin/sh
screen -r megadl /home/pi/mega_start.sh

它加载屏幕,但 mega_start.sh 中没有任何反应。

Filename="mega_start.sh" - 我在大部分代码所在的位置创建此文件。出于测试目的,我现在只包含 echo。

#!/bin/sh
echo "test"

我究竟做错了什么?它会一直工作,直到我想要 start.sh 加载 mega_start.sh 文件。

答案1

对于“我做错了什么”部分,答案在手册中:)

-r 恢复分离的屏幕会话。不能指定其他选项(除了与 -d/-D 的组合),但可能需要 [pid.]tty.host 的可选前缀来区分多个分离的屏幕会话。

附加到会话时您无法执行太多操作。所以,你可以做什么?您可以使用 screenstuff将该命令放入现有的屏幕输入队列中,然后附加到它(脚本后的新行将实际执行它)start.sh,:

#!/bin/sh
screen -S megadl -X stuff '/home/pi/mega_start.sh\n'
screen -r megadl

重要的是要注意,如果您已经在该屏幕中运行某些内容,您会将其传递到那里,因此如果您可能正在运行重要的内容,则可能会很危险:

$ screen -S test -X stuff 'top\n'  # run top

$ screen -r test  # top displaying processes

$ screen -S test -X stuff 'q'  # kill top
$ screen -r test  # top is no longer running

相关内容