Um den Überblick zu behalten platziere ich gerne mehrere Befehle immer in der gleichen Reihenfolge und starte sie automatisch zusammen (gradle, git, database, scala-REPL, jboss ...)
-H (hold) scheint zu bedeuten, dass das Terminal nach dem Beenden nicht geschlossen wird, aber wie kann ich einen solchen Prozess absichtlich beenden? Keineswegs? So, dass ich das Terminal weiter nutzen kann.
Ich benutze xubuntu mit xfce4-terminal und bash. Gibt es eine bessere GUI-Lösung, um mehrere Befehle zu starten und in diesem Fenster / dieser Registerkarte weiterarbeiten zu können?
Update: Wenn Sie diese Befehle nicht kennen: Jboss und gradle produzieren kontinuierlich Ausgaben, die Sie nicht im selben Terminal mischen möchten. Und manchmal müssen sie mit ^ C unterbrochen und neu gestartet werden. Ich öffne nicht gerne einen xfce4-Begriff erneut und navigiere zu dem Verzeichnis, in dem ich handeln muss.
Datenbank und scala-REPL sind interaktiv, daher macht es keinen Sinn, sie im Hintergrund zu starten.
Mein aktuelles Startskript navigiert einfach zu den gewünschten Verzeichnissen und öffnet alle Registerkarten in der richtigen Reihenfolge, um sie immer an derselben Position zu finden, wobei jede Registerkarte ihrem Zweck entsprechend benannt wird:
xfce4-terminal -T eclipse --working-directory=/home/stefan/oximity -e "/opt/eclipse/eclipse" \
--tab -T arandr --working-directory=/home/stefan/oximity -e "arandr /home/stefan/.screenlayout/oximity.sh" \
--tab -T bash --working-directory=/home/stefan/oximity \
--tab -T gradle --working-directory=/home/stefan/oximity/med \
--tab -T git --working-directory=/home/stefan/oximity/med \
--tab -T mysql --working-directory=/opt/mini/mysql \
--tab -T jboss --working-directory=/opt/mini/jboss \
--tab -T jboss-log --working-directory=/opt/mini/jboss/standalone/log \
--tab -T scala-REPL --working-directory=/home/stefan/proj/mini/forum -e /opt/scala/bin/scala
Eclipse und arandr werden von der Shell getrennt und in einem eigenen Fenster ausgeführt, sodass dort der Parameter -e (execute) funktioniert. Ich denke für die Scala-REPL funktioniert es, da es der letzte Befehl in der Liste ist.
quelle
xterm -e 'stuff;bash'
?Antworten:
Die
-H/-hold
Option besteht darin, das Terminal-Emulator-Fenster geöffnet zu lassen, sobald die darin gestarteten Anwendungen (Shell oder andere) beendet wurden. In diesem Zustand kann nichts mehr passieren.Wenn Sie einen Befehl als Job einer interaktiven Shell im Terminalemulator von xfce4-terminal starten und die Shell weiterhin ausführen und interaktiv verwenden möchten, nachdem die Anwendung mit beendet wurde
bash
, können Sie die$PROMPT_COMMAND
Umgebungsvariablexfce-terminal
start verwenden Eine interaktive Shell, die den angegebenen Befehl unmittelbar vor der ersten Eingabeaufforderung startet.Auf diese Weise sind die Befehle Jobs dieser Shell, was bedeutet, dass Sie sie anhalten Ctrl-Zund später fortsetzen können,
fg/bg
als hätten Sie sie an der Eingabeaufforderung dieser interaktiven Shell eingegeben.Das setzt allerdings voraus, dass Sie das nicht
$PROMPT_COMMAND
in Ihr setzen~/.bashrc
. Beachten Sie auch, dass der Beendigungsstatus des Befehls in nicht verfügbar ist$?
.Um den Befehl noch mehr an die Shell-Eingabeaufforderung anzupassen, können Sie ihn sogar zur Verlaufsliste hinzufügen. Mögen:
Auf diese Weise können Sie nach dem Beenden
vi
die UpTaste drücken, um denselbenvi
Befehl abzurufen.Ein einfacher Weg, es zu schreiben:
Das:
Lösung wie in anderen Antworten angegeben funktioniert, hat aber einige Nachteile:
cmd
ausgeführt wird, wird der äußeresh
Prozess beendet, da für beidesh
und nur eine Prozessgruppe vorhanden istcmd
.cmd
$PROMPT_COMMAND
Annäherung ist der Beendigungsstatus des Befehls in nicht verfügbar$?
.Sie können 1 oben umgehen, indem Sie Folgendes tun:
Oder:
Mit diesem letzteren können Sie den Prozess auch unterbrechen Ctrl-Z, aber Sie können ihn nicht verwenden
fg/bg
. Sie können es jedoch im Hintergrund fortsetzen, indem Sie akill -s CONT
auf der pid von ausführencmd
.quelle
bash
Skripten gibt es überhaupt keinen Verlauf, da es keine Zeilenbearbeitung oder Benutzerinteraktion gibt, es sei denn, Sie verwenden ihnread -e
in Ihrem Skript (und Sie werden sehen, dass er dorthistory -s text
funktioniert, um den Verlauf, der von ihm gesehen wird, hervorzuhebenread -e
). Hier wird nichthistory -s
von einem Skript ausgeführt, sondern vom$PROMPT_COMMAND
Hook einer interaktiven Shell.xfce4-terminal
ab Version 0.6.3 nun ein zusätzlicher Parameter ---disable-server
- durch die Umgebung geleitet werden soll. Ref: lists.debian.org/debian-user/2017/10/msg00045.html .Soweit ich Ihre Frage verstanden habe, möchten Sie einige Prozesse in einem Terminal ausführen, in der Lage sein, sie Ctrl+ Cund danach das Fenster mit der Shell offen zu halten.
Wenn ich recht habe, könnte dies mit einem Befehl wie dem folgenden erreicht werden:
quelle
mehrere Apps in
xfce4-terminal
RegisterkartenHinzufügen einer interaktiven Shell zu jeder xfce-Registerkarte
Sie können diesen Hack verwenden, um eine Shell hinzuzufügen, wenn Sie Ctrl+Ceine Registerkarte:
Dadurch erhalten Sie Folgendes:
quelle
Beim Verlassen der Shell ohne
-H
Terminal wird auch geschlossen. Mit diesem Flag läuft das Terminal weiter, aber der Shell-Prozess wird geschlossen und kann nicht wiederbelebt werden.Ich denke, Sie versuchen zu erreichen, dass Sie gerade Ihr Terminal starten und Ihre Entwicklungsumgebung hochfährt?
Sie können ein Shell-Skript erstellen und alle Ihre Befehle darin ablegen. Am Ende des Skripts starten Sie einfach Ihre Shell:
Rufen Sie dann dieses Skript über auf
xfce4-terminal -e /the/script
. Beim Verlassen von$SHELL
des übergeordneten Prozesses (Ihres Skripts) abgeschlossen ist und die Hintergrundaufgaben das Beendigungssignal erhalten und auch beendet werden.Wenn Sie sie am Leben erhalten möchten, verwenden Sie zB
nohup jboss &
in Ihrem Skriptquelle