我读过很多不同的链接,例如:
这些似乎都在说同样的事情。我已经尝试了大多数适用的选项,但不知道我做错了什么。
目前,我正在手动加载脚本,以免引入任何其他可能的问题。
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