staging.inyokaproject.org

Automatische "Enter"- oder "Space"-Eingabe in Bash Script

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

heusmich

Anmeldungsdatum:
30. Mai 2021

Beiträge: Zähle...

Hallo zusammen,

wie kann ich in einem Bash Script eine "Enter"- oder "Space"-Eingabe automatisch ausführen lassen? Problem ist folgendes: Ich muss in einem Script "screen" ausführen und anschließend in Screen weitere Commands ausführen. Problem ist nur, dass nach der Eingabe von "screen" entweder "Space" oder "Enter" durch den User gedrückt werden muss, damit es weitergeht. Frage ist nun, wie ich das im Bash-Script eintragen muss, damit entweder "Enter" oder "Space" automatisch ausgeführt wird. Kann mir hier einer helfen?

MfG heusmich

marant...

Anmeldungsdatum:
2. Februar 2021

Beiträge: 645

wie kann ich in einem Bash Script eine "Enter"- oder "Space"-Eingabe automatisch ausführen lassen?

bspw. https://wiki.ubuntuusers.de/xdotool/ Wenn es im Hintergrund läuft wird's etwas schwieriger. (dem Fenster zuweisen)

Denke, das hatte ich falsch verstanden, geht wohl darum, daß bei bestimmter Eingabe autom. Reaktion erfolgen soll.

heusmich

(Themenstarter)

Anmeldungsdatum:
30. Mai 2021

Beiträge: Zähle...

Richtig, darum geht es im Generellen. Wenn ich in Putty "screen" eingebe, erscheint eine Meldung, die ich mit "Space" oder "Enter" bestätigen muss. Vorher kann ich keine weiteren Eingaben in Screen machen. Und diese Bestätigung würde ich gerne automatisiert erfolgen lassen. Die darauffolgenden Eingaben würden dann ja auch wieder automatisiert erfolgen. Hängt aktuell also erstmal nur an der einen Eingabe von "Space" oder "Enter"...

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Versuch mal sowas, um einen Zeilenumbruch zu senden:

1
screen -X stuff "^M"

heusmich

(Themenstarter)

Anmeldungsdatum:
30. Mai 2021

Beiträge: Zähle...

Geht leider nicht, Meldung: "No screen session found."

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Naja -X funktioniert auch nur mit einer existierenden screen-Session.

Vielleicht kann man die Nachricht in der screenrc ausschalten? https://unix.stackexchange.com/questions/33786/how-do-you-bypass-or-skip-the-intro-message-when-starting-screen#33789

Oder willst Du die noch weiterhin vorhanden haben?

heusmich

(Themenstarter)

Anmeldungsdatum:
30. Mai 2021

Beiträge: 12

Ich brauch die nicht zwingend. Wie kann ich die ausschalten?

EDIT: Hab was gefunden: https://unix.stackexchange.com/questions/33786/how-do-you-bypass-or-skip-the-intro-message-when-starting-screen Mit "screen -q" geht es, ohne Dateien zu bearbeiten. Ich werde mal testen, ob sich das entsprechend implementieren lässt und ich zum gewünschten Ziel komme.

Melde mich dann nochmal, bis dahin schon mal vielen Dank! 😉

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Interaktive Programme kann man mit expect steuern.

heusmich

(Themenstarter)

Anmeldungsdatum:
30. Mai 2021

Beiträge: 12

OK, ich komme jetzt mit "screen -q" in Screen rein, allerdings werden die darauffolgenden Commands aus dem Script nicht mehr ausgeführt. Weiß jemand, warum das so ist?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Möglicherweise wäre es auch eine Option sich tmux anzuschauen. Ich habe diese Funktionalität nie gebraucht, aber tmux ist generell leistungsfähiger.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

heusmich schrieb:

OK, ich komme jetzt mit "screen -q" in Screen rein, allerdings werden die darauffolgenden Commands aus dem Script nicht mehr ausgeführt. Weiß jemand, warum das so ist?

Weil die Screen-Session die Ausführung der nachfolgenden Befehle blockiert, solange sie aktiv ist - in der Screen-Session hast du ja eine andere Shell vor dir (vergleich mal den Wert der Variable $$).

Man kann eine detachte Screen-Session erzeugen und Befehle draun ausführen, ohne sich zu attachen, also z.B.:

screen -dmS "TEST"
screen -S "TEST" -X stuff "ls -l^M"
screen -S "TEST" -X stuff "echo 'Hallo Welt'^M" 

Das gleiche mit tmux:

tmux new-session -d -s "TEST"
tmux send-keys -t my-session-name:0 "ls -l" ENTER
tmux send-keys -t my-session-name:0 "echo 'Hallo Welt" ENTER 

Was auch machen kann, ist tmux ein Skript als Startargument mitzugeben (die Sitzung endet, wenn der letzte Befehl im Skript ausgeführt wurde):

tmux new-session -d -s "TEST" /pfad/zum/skript 

heusmich

(Themenstarter)

Anmeldungsdatum:
30. Mai 2021

Beiträge: 12

Also bei mir funzt das irgendwie nicht. Habe folgenden Befehl ausgeführt:

screen -dmS TheForest xvfb-run --auto-servernum --server-args='-screen 0 640x480x24:32' wine $serverdir/TheForestDedicatedServer.exe -batchmode -nographics -savefolderpath "$serverdir/saves/" -log -configfilepath "$serverdir/saves/config/config.cfg"

Er sagt mir danach zwar, dass der Server gestartet wurde, ich bekomme ihn aber in Steam und ingame nicht als aktiv angezeigt... Ist an dem Command irgendwas falsch?

PS: $serverdir wurde vorher definiert.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Ich kenne mich mit screen nicht aus - möglicherweise kommt man damit ja auch zum Ziel.

Mit expect bin ich auch nicht sonderlichh vertraut, aber damit kommt Ihr ganz bestimmt weiter.

1
sudo apt install expect 

ist der Startpunkt, dann natürlich man expect, vielleicht gibt es auch gute Onlinedokus, womöglich auf Deutsch.

heusmich

(Themenstarter)

Anmeldungsdatum:
30. Mai 2021

Beiträge: 12

OK, nach viel rumprobieren habe ich es hinbekommen. Es gab scheinbar Probleme mit "$serverdir", damit konnte der Server nicht umgehen. Ist zwar komisch, da es in anderen Skripten funktioniert aber naja, egal. Bei Gelegenheit werde ich mir das nochmal anschauen. Habe "$serverdir" jetzt mit "/home/steam/theforest/" ersetzt, jetzt startet der Server und ich sehe ihn in den Steam-Favoriten und auch ingame. Joinen ist ebenfalls möglich.

Vielen Dank an alle für die Hilfe! 😀 👍

Antworten |