bon*_*ang 29 scripting gnu-screen shell-script shebang
我想在分离的屏幕中运行 bash 脚本。该脚本多次调用程序,每次都需要等待太长时间。我的第一个想法是简单地打开一个屏幕,然后调用脚本,但似乎ctrl-a d
在脚本运行时我无法分离 (by )。所以我做了一些研究,发现这个指令用以下内容替换了shebang:
#!/usr/bin/screen -d -m -S screenName /bin/bash
Run Code Online (Sandbox Code Playgroud)
但这也不起作用(无法识别选项)。有什么建议?
PS 我刚刚想到screen -dmS name ./script.sh
这可能对我的目的有用,但我仍然很好奇如何将它合并到脚本中。谢谢你。
Gil*_*il' 35
您看到的shebang行可能适用于某些 unix 变体,但不适用于 Linux。Linux 的shebang 行是有限的:您只能有一种选择。整个字符串-d -m -S screenName /bin/bash
作为单个选项传递给screen
,而不是作为不同的词传递。
如果你想在 screen 内运行一个脚本而不是乱七八糟的多个文件或引用,你可以使脚本成为一个 shell 脚本,如果它不在 screen 内,它就会调用 screen 。
#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
Run Code Online (Sandbox Code Playgroud)
rye*_*ayo 21
根据屏幕手册页:
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
Run Code Online (Sandbox Code Playgroud)
这是您需要添加要运行的脚本名称的部分,这应该允许您从屏幕执行您需要的所有操作。
小智 7
这有点旧,但我能找到的为数不多的线程之一。在玩弄之后,使用 ubuntu 14 让它在分离模式下运行的唯一方法是
screen -d -m -t nameofwindow sh nameoflaunch.sh
Run Code Online (Sandbox Code Playgroud)
启动将是上面的第二部分,其中包含当前的 java 命令和服务器版本。我运行香草。