Ich habe zwei Shell-Skripte, sagen wir client.sh
und server.sh
, die gleichzeitig laufen und eine brauchbare Ausgabe in watch
-way liefern müssen.
Und ich kann nur ein Terminal verwenden. Ich sollte also zwischen ihnen wechseln, um zu sehen, was passiert, ohne sie jedoch anzuhalten ( Ctrl+ Z).
Ich weiß nicht, wie das geht.
Wenn ich ausführe
./server.sh &
dann geben Sie Enterim Terminal ein (vor dem Starten desclient.sh), aber es zeigt
[1]+ Stopped ./server.sh
Gibt es eine praktische Möglichkeit, im Terminal zwischen Jobs zu wechseln, um ihre Ausgabe (internen Status) anzuzeigen, ohne sie anzuhalten?
Antwort1
Verwenden screen
:
$ screen -S my-job
Dadurch wird eine neue Sitzung mit dem Namen „my-job“ gestartet screen
und eine Verbindung damit hergestellt.
$ ./server.sh
Dadurch wird Ihr server.sh
Skript auf dem ersten (Standard-)Terminal gestartet, das an die screen
Sitzung angeschlossen ist. Drücken Sie nun Ctrl- Agefolgt von Ctrl- C. Dadurch wirdCErstellen Sie ein neues Terminal und wechseln Sie dorthin. Jetzt können Sie Folgendes ausführen:
$ ./client.sh
und beobachten Sie die Ausgabe. Um hin- und herzuschalten, drücken Sie Ctrl- Aund dann erneut Ctrl- A.
Um die Verbindung zu trennen screen
und Ihre Programme weiterhin laufen zu lassen, drücken Sie Ctrl- Aund anschließend daufDetach. Um die Verbindung wiederherzustellen und Ihre Ausgabe erneut anzuzeigen, verwenden Sie:
$ screen -x my-job
Sie können die Ausgabe beider Skripts auch gleichzeitig anzeigen, während sie angehängt sind. Gehen Sie dazu wie folgt vor:
- Drücken Sie Ctrl- Aund anschließend szumSTeilen Sie Ihre Ansicht mit.
- Drücken Sie Ctrl- Aund anschließend , Tabum zum unteren Split-Bildschirm zu gelangen.
- Ctrl- Klicken Sie Aanschließend auf ", um eine Liste mit aktiven Terminals zu öffnen. Wählen Sie das 1. Terminal aus (das 0. ist standardmäßig mit dem oberen Split verbunden).
Antwort2
Was Sie suchen, ist die Jobsteuerung von Bash. Sie können alles darüber lesen, indem man bash
Sie nach „JOB CONTROL“ suchen (geben Sie es /^JOB CONTROL
in die Manpage von Bash ein).
Trotzdem command &
sollte der Befehl immer noch im Hintergrund laufen. Das können Sie mit dem jobs
Befehl der Bash überprüfen. Dieser listet alle Hintergrundjobs mit Jobnummer und Status auf.
Mit bg n
oder %n &
können Sie einen gestoppten Job mit der Jobnummer n fortsetzen (z. B. bg 5, um Job Nr. 5 fortzusetzen).
Mit fg n
oder %n
können Sie einen Job aus dem Hintergrund wieder in den Vordergrund holen.
Hoffe das hilft.
Antwort3
Verwenden Sie etwas wie screen(1) oder tmux(1), um das Äquivalent mehrerer Terminals gleichzeitig auszuführen. Sie können sich sogar abmelden und sie von woanders aus erneut aufrufen.
Verwenden Sie Tabs beispielsweise im Gnome Terminal.
Verwenden Sie die Jobsteuerung in bash(1) (lesen Sie unbedingt die relevanten Teile der Infodatei), um Jobs zu stoppen/in den Hintergrund/Vordergrund zu stellen.