我正在尝试弄清楚如何编写一个脚本,该脚本将在系统启动时在 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