使用 GNU screen 运行程序,然后立即分离

使用 GNU screen 运行程序,然后立即分离

我正在尝试弄清楚如何编写一个脚本,该脚本将在系统启动时在 GNU Screen 会话中启动程序。我正在尝试这样做:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

但是由于会话已分离,命令无法执行?我唯一需要做的就是在屏幕会话中运行命令并立即分离此会话。

感谢您的回答,但现在我又遇到了另一个问题。在我为“程序和程序2”添加一些变量后,脚本停止工作。如下所示:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

由于某种原因,“-f config.cfg”被忽略了。我也试过引用命令,但也没用。

答案1

您真的想将 放在\行尾吗?如果不是,请尝试删除它们 - 它们会转义以下字符。

另外,放弃-X帮助设置工作对我来说,例如:

screen -S test -d -m -X touch /tmp/test

但是失败了No screen session found

screen -S test -d -m touch /tmp/test

效果很好。因此,我认为下面的方法对你有用:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

请记住,如果您在启动时运行此程序,则 $HOME 与您以特定用户身份登录后不同。如果您需要以特定用户身份运行它,则需要使用类似以su该用户身份运行它,并且指定完整路径将消除任何歧义:

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

或者,您可以将上面的整个脚本调用为su - username /path/to/your/script

答案2

就像 Cry Havok 提到的,您可以将程序直接放在命令行上。

如果您确实必须使用 -X 选项,那么 a) 您需要指定“screen”命令并且 b) 会话需要事先存在。

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

相关内容