在屏幕中运行脚本

在屏幕中运行脚本

我想在独立的屏幕中运行 bash 脚本。该脚本多次调用程序,每次都需要等待很长时间。我的第一个想法是简单地打开一个屏幕,然后调用脚本,但似乎ctrl-a d在脚本运行时我无法分离(通过)。所以我做了一些研究并发现了这个操作说明将 shebang 替换为以下内容:

#!/usr/bin/screen -d -m -S screenName /bin/bash

但这也不起作用(选项不被识别)。有什么建议么?

PS 我现在想到这screen -dmS name ./script.sh可能适合我的目的,但我仍然很好奇如何将其合并到脚本中。谢谢。

答案1

舍邦您所看到的行可能适用于某些 UNIX 变体,但不适用于 Linux。 Linux 的 shebang 行是有限的:你只能有一种选择。整个字符串-d -m -S screenName /bin/bash作为单个选项传递给screen,而不是作为不同的单词传递。

如果您想在屏幕内运行脚本而不是处理多个文件或引用,您可以将该脚本设为 shell 脚本,如果尚未在屏幕内运行,则该脚本会调用屏幕。

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

答案2

根据屏幕手册页:

  • screen -d -m 以分离模式启动屏幕。这会创建一个新会话,但不会附加到它。这对于系统启动脚本很有用。
  • -S sessionname 将新会话的名称设置为 sessionname。

所以当我运行你提供的命令时:screen -dmS name ./script.sh

Screen 启动一个名为 name 的窗口并自动运行该 script.sh。要返回那里查看状态,您只需键入:screen -r test

现在使用 Ubuntu 14.04,命令略有不同。尝试:

screen -d -m -S test

现在要运行脚本,您需要转到其配置文件来执行此操作:

sudo vim /etc/screenrc

到达那里后,向下滚动到底部,您将看到:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

在这一部分,您需要添加要运行的脚本名称,这应该允许您从屏幕上执行所需的所有操作。

答案3

这有点旧了,但这是我能找到的为数不多的线程之一。在尝试了在 ubuntu 14 上以分离模式运行的唯一方法是:

screen -d -m -t nameofwindow sh nameoflaunch.sh

发布将是上面的第二部分,其中包含当前的 java 命令和服务器版本。我经营香草。

相关内容