在屏幕上运行脚本


25

我想在分离的屏幕上运行bash脚本。该脚本会多次调用一个程序,每次等待都花费很长时间。我的第一个想法是只打开一个屏幕,然后调用该脚本,但是似乎无法ctrl-a d在脚本运行时分离(by )。因此,我进行了一些研究,发现此指令将shebang替换为以下内容:

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

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

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

Answers:


28

您所见过的shebang行可能适用于某些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

它运作良好,这有什么"$0"用?
比奇'16

4
@Lordofdark这是脚本名称。脚本调用screen/bin/bash哪个调用又调用哪个脚本。
吉尔斯(Gilles)'所以

16

根据屏幕手册页:

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

因此,当我运行您提供的命令时: screen -dmS name ./script.sh

屏幕将启动一个名为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

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


screen -dmS ...尽管确实可以,但该命令()不适用于我。我运行它,然后screen -ls没有找到套接字。有什么想法吗?
邦邦

您正在使用什么发行版?
ryekayo 2014年

我认为NAME =“ Ubuntu” VERSION =“ 14.04.1 LTS,Trusty Tahr”。这是一个虚拟机。
邦邦

给我一点点,因为我刚离开工作,生病了尝试在我的机器上使用屏幕,这也是ubuntu 14.04
ryekayo 2014年

@bongbang-您使用的是哪个版本的屏幕?
slm

3

这有点旧,但是我可以找到执行此操作的几个线程之一。在玩弄了很多之后,使用ubuntu 14在分离模式下运行它的唯一方法是

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.