在Unix命令中同时启动屏幕并运行命令?

8

我想知道如何启动类似以下命令的操作:

while :; do ./myCommand; done;

但是,与其按照惯例做法

screen -S nameOfMyScreen

然后执行该命令。
while :; do ./myCommand; done;

然后将屏幕分离。
^a ^d (Control "a" the control "d"

我希望它能够启动并分离。谢谢!

2个回答

11
screen -d -m sh -c "while :; do ./myCommand; done;"

解释:

  • -d -m 以分离模式(创建会话但不连接)启动 screen。
  • sh -c commandline 启动一个 shell,该 shell 执行给定的命令行(由于使用了 while 内置命令,因此这是必要的)。

我的系统上的屏幕版本显示,-c 选项是读取替代配置文件而不是 .screenrc。 - Mike Seplowitz
-c 参数并不是传递给 screen 命令,而是传递给 sh。当 screen 命令行解析器读取到 sh(即没有短横线的内容)时,它知道后面没有更多的选项,剩下的所有内容都是要执行的命令。 - Heinzi
1
感谢这个 Shell 技巧。我原本是在调用一个命令,但我想将输出包括 stderr 一起记录到日志文件中... 当我添加了管道和重定向后,日志文件会是空的,可能是从 screen 而不是我的命令中获取输出。我尝试添加引号,但没有成功。使用这里建议的子 shell 很棒!\o/ - msb

3

screen -h 命令中,以下内容看起来很有用:

-dmS name     Start as daemon: Screen session in detached mode.
-X            Execute <cmd> as a screen command in the specified session.

我自己没有做过这个,但这是我会开始的地方。
更新:
帮助页面顶部也写着:
Use: path/to/screen [-opts] [cmd [args]]

因此,-X开关可能是执行screen命令而不是shell命令。您可以在-dmS <name>之后直接放置您的命令,而无需任何-X开关。


+1. 这些组合可以完成你的工作。由于你的command是一个脚本,你可能需要将其放入文件中并传递该文件,或者使用bash -c或类似的东西。 - Noufal Ibrahim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接