问题描述
我试图弄清楚如何编写一个脚本,该脚本将在系统启动时在 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”被忽略了。我也试图引用命令并且也没有帮助。
最佳回答
你真的是想把 \
放在行尾吗?如果没有,请尝试删除它们 – 它们会转义以下字符。
此外,删除 -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
。
次佳回答
就像 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