Skript in einem Bildschirm ausführen

Skript in einem Bildschirm ausführen

Ich möchte ein Bash-Skript in einem abgetrennten Bildschirm ausführen. Das Skript ruft ein Programm mehrere Male auf, und jedes Mal dauert es zu lange, um zu warten. Mein erster Gedanke war, einfach einen Bildschirm zu öffnen und dann das Skript aufzurufen, aber es scheint, dass ich mich nicht abtrennen kann (durch ctrl-a d), während das Skript ausgeführt wird. Also habe ich etwas recherchiert und Folgendes gefundenAnweisungum den ganzen Kram durch Folgendes zu ersetzen:

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

Aber das funktioniert auch nicht (die Optionen werden nicht erkannt). Irgendwelche Vorschläge?

PS: Mir fällt gerade ein, dass das screen -dmS name ./script.shfür meine Zwecke wahrscheinlich funktionieren würde, aber ich bin immer noch neugierig, wie ich das in das Skript integrieren kann. Danke.

Antwort1

DersiebangZeile, die Sie gesehen haben, funktioniert möglicherweise unter einigen Unix-Varianten, aber nicht unter Linux. Die Shebang-Zeilen von Linux sind begrenzt: Sie können nur eine Option haben. Die gesamte Zeichenfolge -d -m -S screenName /bin/bashwird als einzelne Option an übergeben screen, anstatt als verschiedene Wörter.

Wenn Sie ein Skript innerhalb des Bildschirms ausführen und nicht mit mehreren Dateien oder Anführungszeichen herumspielen möchten, können Sie das Skript zu einem Shell-Skript machen, das den Bildschirm aufruft, wenn es sich nicht bereits innerhalb des Bildschirms befindet.

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

Antwort2

Laut den Manpages des Bildschirms:

  • screen -d -m Startbildschirm im getrennten Modus. Dadurch wird eine neue Sitzung erstellt, aber keine Verbindung zu ihr hergestellt. Dies ist für Systemstartskripte nützlich.
  • -S sessionname Legen Sie den Namen der neuen Sitzung auf „Sitzungsname“ fest.

Als ich also den von Ihnen angegebenen Befehl ausführte:screen -dmS name ./script.sh

Screen öffnet ein Fenster namens Name und führt automatisch script.sh aus. Um dorthin zurückzukehren und den Status anzuzeigen, geben Sie einfach Folgendes ein:screen -r test

Mit Ubuntu 14.04 sind die Befehle nun etwas anders. Versuchen Sie:

screen -d -m -S test

Um das Skript nun auszuführen, müssen Sie dazu zu deren Konfigurationsdatei gehen:

sudo vim /etc/screenrc

Scrollen Sie dort nach unten und Sie sehen:

# 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

In diesem Abschnitt müssen Sie den Namen des auszuführenden Skripts eingeben. Damit sollten Sie alles Notwendige auf dem Bildschirm erledigen können.

Antwort3

Dies ist zwar schon etwas älter, aber einer der wenigen Threads, die ich dazu finden konnte. Nach einigem Herumprobieren ist die einzige Möglichkeit, dies im getrennten Modus mit Ubuntu 14 zum Laufen zu bringen,

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

Der Start erfolgt über den zweiten Teil oben, der die aktuellen Java-Befehle und die Serverversion enthält. Ich verwende Vanilla.

verwandte Informationen