运行带有 GNU 屏幕的程序并在之后立即分离

TbM*_*bMa 27 scripts 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 \
Run Code Online (Sandbox Code Playgroud)

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

感谢您的回答,但现在我面临另一个问题。在我为“程序和程序 2”放置一些变量后,脚本停止工作。像这样的东西:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg
Run Code Online (Sandbox Code Playgroud)

出于某种原因,“-f config.cfg”被忽略了。我也试图引用命令并且也没有帮助。

Cry*_*vok 34

你真的想把 放在\行尾吗?如果没有,请尝试删除它们 - 它们会转义以下字符。

此外,删除-X有助于设置对我有用,例如:

screen -S test -d -m -X touch /tmp/test
Run Code Online (Sandbox Code Playgroud)

失败No screen session found,但是:

screen -S test -d -m touch /tmp/test
Run Code Online (Sandbox Code Playgroud)

工作正常。因此,我怀疑以下内容对您有用:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2
Run Code Online (Sandbox Code Playgroud)

请记住,如果您在启动时运行它,$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
Run Code Online (Sandbox Code Playgroud)

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