Führen Sie ein Programm mit GNU-Bildschirm aus und trennen Sie sofort danach


27

Ich versuche herauszufinden, wie man ein Skript schreibt, das Programme in GNU Screen-Sitzungen beim Systemstart startet. Ich versuche das:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

Aber der Befehl kann nicht ausgeführt werden, da die Sitzung bereits getrennt ist. Das einzige, was ich brauche, ist Befehl in Bildschirmsitzung ausführen und diese Sitzung sofort trennen.

Danke für die Antworten, aber jetzt stand ich vor einem anderen Problem. Das Skript funktioniert nicht mehr, nachdem ich einige Variablen für mein "Programm und Programm2" eingegeben habe. Etwas wie das:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

Aus irgendeinem Grund wurde "-f config.cfg" ignoriert. Ich werde auch versucht, Befehl zu veranschlagen und helfe auch nicht.


Warum die -XOption?
Enzotib

Antworten:


34

Wollten Sie wirklich das \am Ende der Zeile setzen? Wenn nicht, entfernen Sie diese - sie entziehen sich dem folgenden Zeichen.

Auch das Fallenlassen -Xfür mich hilft die Setup - Arbeit, zum Beispiel:

screen -S test -d -m -X touch /tmp/test

scheitert No screen session foundjedoch mit:

screen -S test -d -m touch /tmp/test

funktioniert gut. Als solches vermute ich, dass das folgende für Sie arbeiten wird:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

Denken Sie daran, dass $ HOME nicht dasselbe ist, wenn Sie es beim Booten ausführen, nachdem Sie sich als ein bestimmter Benutzer angemeldet haben. Wenn Sie es als ein bestimmter Benutzer ausführen müssen, müssen Sie das Gleiche verwenden su, um es als dieser Benutzer auszuführen. Wenn Sie den vollständigen Pfad angeben, werden alle Unklarheiten beseitigt:

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

Oder Sie würden das gesamte obige Skript als aufrufen su - username /path/to/your/script.


Danke für die Antworten, aber jetzt stand ich vor einem anderen Problem. Skript funktioniert nicht mehr, nachdem ich einige Variablen für mein "Programm und Programm2"
TbMa 23.09.11

Dies: screen -S test -d -m $HOME/folder/folder/.programfast genau das, wonach ich suche, außer wenn Ordner / .programm beendet ist, wird die Bildschirmsitzung automatisch geschlossen. Gibt es eine Möglichkeit, die Bildschirmsitzung (Shell) auch nach Abschluss des Programms weiterlaufen zu lassen? Vielleicht anstatt das Programm exklusiv auszuführen, starten Sie eine Shell, die das Programm startet und dann zur Shell-Eingabeaufforderung zurückkehrt, oder so?
RocketNuts

4

Wie Cry Havok bereits erwähnt hat, können Sie das Programm direkt in der Befehlszeile platzieren.

Wenn Sie die Option -X wirklich verwenden müssen, müssen Sie a) den Befehl 'screen' angeben und b) die Sitzung muss vorher vorhanden sein.

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2

Wenn Sie das Programm in die Befehlszeile eingeben, wird der Bildschirm beim Beenden des Programms beendet. Ich sehe kein Befehlszeilen-Flag, um den Bildschirm offen zu halten, wenn Sie die Konsolenausgabe sehen möchten. Wenn Sie den Bildschirm starten und die Befehle wie hier gezeigt separat senden, benötigen Sie möglicherweise explizite sleepBefehle, um dem Bildschirm Zeit zum Starten der Sitzung zu geben, bevor Sie den Befehl senden.
Chinasaur

Diese Antwort ist der Antwort von stackoverflow.com sehr ähnlich, die eine ähnliche Frage beantwortet . Ich bevorzuge diese Antwort mehr als @CryHavok, weil diese Antwort Ihr Programm innerhalb der Standard-Shell Ihres Benutzers ausführt (@CryHavok führt Ihr Programm ohne eine übergeordnete Shell aus, sodass die Bildschirmsitzung sofort beendet wird, wenn das Programm stirbt oder Sie die Strg-Taste drücken)
Trevor Boyd Smith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.