当前位置: 首页>>技术教程>>正文


scripts – 使用 GNU 屏幕运行程序并在之后立即分离

,

问题描述

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12487.html,未经允许,请勿转载。