Bash-Skript: Erstellen Sie eine Bildschirmsitzung und führen Sie darin einen Befehl aus

3632
phyyyl

Ich möchte eine bash-Datei schreiben, die eine Bildschirmsitzung startet und darin einen Befehl ausführt.

Das Problem ist, dass zuerst eine Sitzung erstellt wird und wenn Sie die Sitzung manuell beenden, wird der nächste Befehl ausgeführt. Gibt es eine Möglichkeit, den Befehl innerhalb der Sitzung auszuführen?

Dies ist mein Code bis jetzt:

#!/bin/bash screen -S test python3 test.py 
0

1 Antwort auf die Frage

1
djsmiley2k

Sie müssen den Befehl übergeben, um in der Bildschirmsitzung ausgeführt zu werden. Sie können dies tun, indem Sie den Befehl direkt übergeben oder ein Skript aufrufen, das den gewünschten Befehl ausführt.

screen -S test "python3 test.py" 

Wenn Sie diese Methode verwenden, beachten Sie, dass sich command ( python) und das an it ( test.py) übergebene Argument beide innerhalb der Sprachmarken ".." befinden. Dies kann kompliziert werden, wenn Sie Argumente übergeben, die spezifisch formatierte Sprachmarken erfordern Vielleicht ist es einfacher, die untenstehende Methode zu verwenden.

screen -S test /home/user/test.sh 

wo sich test.sh in / home / user / befindet, ist ausführbar ( chmod +x ./test.py) und enthält:

#!/bin/sh python3 test.py 

Der zweite Vorteil besteht darin, dass Sie im Skript so viele Befehle haben können, wie Sie möchten, sie werden nacheinander ausgeführt.

Sie können mehrere Befehle gleichzeitig ausführen lassen, indem Sie die Task im Hintergrund ausführen:

#!/bin/sh # All 3 will run at the same time python3 test.py & python3 test1.py & python3 test2.py & 

Einige weitere clevere Tricks finden Sie zu einer ähnlichen Frage in SF . Als letzte Sache ist anzumerken, dass bei ALLEN Methoden die Bildschirmsitzung selbst geschlossen wird, sobald Ihr Programm / Skript beendet ist. Wenn Sie nicht möchten, dass dies ausgeführt wird, möchten Sie eine Bash-Sitzung ausführen, die das Skript aufruft und anschließend zur Bash-Sitzung zurückkehrt - so screen -S test "someCommand; bash".