Ich kann das Terminal nicht verwenden, während der Befehl gedit ausgeführt wird

44

Ich habe vor kurzem 12.04 installiert.
Wenn ich versuche, eine Datei mit gedit zu bearbeiten , kann ich das Terminal erst verwenden, wenn ich die Bearbeitungsdatei schließe oder ein neues Terminal öffnen muss. Ich glaube, ich hatte dieses Problem mit 11.04 nicht, bin mir aber nicht sicher.
Gibt es sowieso, um dies zu vermeiden und beim Bearbeiten von Dateien das gleiche Terminal zu verwenden.

Hossein Hosseinvand
quelle

Antworten:

80

Kurze Antwort

Im nicht reagierenden Terminal:

  1. Drücken Sie Ctrl+ Z.
  2. Tippen bgund eingeben.
  3. Tippen disownund eingeben.

Lange Antwort

Drücken Sie im nicht reagierenden Terminal auf Ctrl+ Z, um den Vorgang (oder "Job") anzuhalten und die Konsolensteuerung an Sie zurückzugeben. Sie werden jedoch feststellen, dass geditdas nicht mehr reagiert und Sie es nicht verwenden können.

Extra : Wenn Sie möchten, können Sie den Befehl ausführen jobs, werden Sie feststellen , dass es lesen werden Gestoppt für den geditBefehl, das ist , warum Sie es nicht verwenden können.

Um den Job erfolgreich im Hintergrund geditauszuführen bg(dh wieder reaktionsfähig zu machen ), führen Sie den Befehl aus (dh Hintergrund). Sie können jetzt verwenden geditund haben gleichzeitig die Aufforderung für sich.

Extra : Wenn Sie jetzt ausführen jobs, werden Sie feststellen, dass es Running lautet .

All dies können Sie von Anfang an überwinden. Wenn Sie geditvom Terminal aus starten , fügen Sie &am Ende des Befehls einen hinzu gedit /path/to/file &. Dies wird geditvon Anfang an im Hintergrund gestartet (möglicherweise müssen Sie Entermehrmals drücken, um die Konsolensteuerung wiederherzustellen).

Extra : Wenn Sie diesen zusätzlichen Hinweisen gefolgt sind, haben Sie möglicherweise bemerkt, dass beim zweiten Mal ein jobsBash &am Ende des geditBefehls hinzugefügt wurde .

Sobald Sie sich an dieses System gewöhnt haben, werden Sie möglicherweise feststellen, dass gedit beim Schließen des Terminals auch ohne Bestätigungsdialog beendet wird. Um dies zu verhindern, führen Sie disownFolgendes aus: Dadurch wird der gedit-Prozess vom Terminal getrennt und aus der von zurückgegebenen Liste entfernt jobs.

Alaa Ali
quelle
2
Es hat mich immer überrascht, dass es keine Möglichkeit gibt, einen Prozess, der im Vordergrund läuft, sofort im Hintergrund zu sehen. Sie müssen es zuerst anhalten, was manchmal nicht möglich ist.
Detly
@detly lies den Teil "Du kannst überwinden ..." nochmal!
guntbert
@ guntbert - Hilft nicht, wenn der Prozess bereits läuft ...
detly
44

Tipp einfach:

gedit <filename-to-edit> &

Dadurch wird sofort die Eingabeaufforderung an Sie zurückgegeben.

david6
quelle
5
Dies ist eine wichtige und wissenswerte Unix-Sprache. Jeder Befehl kann auf diese Weise im Hintergrund ausgeführt werden. Tools, die interaktiv sind, werden durch diese Behandlung offensichtlich verwirrt. Mit bubblesort war_and_peace.txt% kann Ihr Sortierer jedoch (für lange, lange Zeit) das Meisterstück ankurbeln, während Sie mit Ihrer Arbeit fortfahren (z. B. QuickSort implementieren) oder so)
Jon Kiparsky
1
@ JonKiparsky Amüsantes Beispiel - macht den Punkt.
Joe
25

Sie können das verwenden nohup, um zu verhindern, dass die GUI an ein Terminal angeschlossen wird:

nohup mupdf some.pdf &

Auf diese Weise können Sie das Terminal schließen, von dem aus Sie starten, ohne dass das Programm geschlossen wird.

Sie sollten auch beachten, dass der Befehl nohup eine Datei mit dem stdoutund stderrdes Befehls erstellt, den Sie ausführen. Wenn Sie das verhindern wollen, fügen Sie &>/dev/nullvor dem &.

nohup mupdf some.pdf &>/dev/null &
Braiam
quelle
4
"nohup" steht für "no hang up". Dies geht auf das frühe Unix zurück, als (physische) Terminals regelmäßig über Telefonleitungen verbunden wurden und Sie daher ein Terminal schließen würden, indem Sie den Hörer auflegen.
MSalters
3
Zusätzliche Informationen: Mit dem Befehl nohup wird eine Datei erstellt, nohup.outdie die Ausgabe des Befehls enthält. Dies ist nützlich, wenn Sie Fehlermeldungen anzeigen möchten. Wenn Sie nicht möchten, dass die Datei erstellt wird, fügen Sie die Umleitung wie folgt hinzu:nohup mupdf some.pdf &>/dev/null &
Paddy Landau,
19

Sie können auch den disownBefehl verwenden. Dies ist besonders nützlich, wenn Sie den Prozess bereits gestartet haben, den Sie nicht mehr mit dem Terminal verbinden möchten.

Das grundlegende Verfahren, wenn ich mich richtig erinnere, ist ungefähr so:

$ > firefox      #Oops
Ctrl + z         #Suspend the process
$ > bg           #Push the process to the background
$ > disown       #Detach most recent process started or stopped
$ > exit         #Terminal gone!

Beachten Sie, dass die Ablehnung bashspezifisch ist.

Dieser Blogbeitrag erklärt beide Methoden ziemlich gut.

Manpage für Disown

jmathew
quelle
Eine Abkürzung:firefox & disown
Flimm
13

Von man gedit:

-b, --background
         Run gedit in the background.

Wenn Sie also geditmit der -bOption ausführen , wird es im Hintergrund gestartet:

gedit -b [FILE-NAME]

Außerdem können Sie als nächstes einen Alias ​​für erstellen gedit -b(siehe hier, wie Sie einen permanenten Alias ​​erstellen):

alias gedit='gedit -b'

Ab jetzt können Sie es gedit [FILE-NAME]wie gewohnt verwenden und es wird im Hintergrund gestartet.

Radu Rădeanu
quelle
2
Es ist eine schlechte Idee, Alias ​​zu verwenden, um allgemeine Befehle neu zu definieren. Auf stackexchange finden Sie viele Threads dazu. Es ist in Ordnung, einen Alias ​​mit einem anderen Namen zu verwenden. Kurz gesagt, das Aliasing vorhandener Befehle führt zu unerwartetem Verhalten auf Ihrem Computer, wenn jemand anderes es verwendet (z. B. wenn Sie versuchen, ein anderes Problem zu beheben). Wenn Sie ein anderes System ohne diese Aliase und Ihre Befehle verwenden, geschieht dasselbe Arbeiten Sie nicht so, wie Sie es erwarten. Eines der Aushängeschilder dafür ist alias rm = 'rm -i'. Es gewöhnt Sie daran, Dinge mit einer zweiten Chance zu löschen, die nicht immer da ist.
Joe
10

Tipp einfach:

gedit FILENAME & disown

Wenn Sie einen Befehl mit &in bash beenden, wird dieser Befehl im Hintergrund ausgeführt. Dieser Prozess ist jedoch weiterhin mit dem Terminal verbunden.

Ohne disownWenn Sie das Terminal schließen, wird gedit geschlossen, ohne dass Sie dazu aufgefordert werden, eine bearbeitete Datei zu speichern. disownTrennt den Hintergrundprozess vom aktuellen Terminal. Wenn Sie das Terminal schließen, wird gedit wie gewohnt weiter ausgeführt. Es stellte sich heraus, dass ich mich geirrt hatte, dies ist nicht der Fall für bash, aber es ist der Fall für zsh. Sie müssen detachnachher noch rennen ctrl- zund bgzwar sogar in der Bash.

Sie können mehr über die Einbauten herausfinden jobs, disownund die &metacharacter in der Man - Page für den bashBefehlManpage-Symbol , vor allem der Abschnitt mit der Überschrift „Jobsteuerung“.

Flimm
quelle
mit konnte disownich das gedit offen halten nachdem das terminal geschlossen war. Ich habe nicht verstanden, was Sie über "Dies ist nicht der Fall für Bash, aber es ist der Fall für
Zsh
0

Dies liegt wahrscheinlich daran, dass Sie gedit über das Terminal geöffnet haben. Wenn Sie dies tun, sehen Sie die Befehlszeilenausgabe, die normalerweise ausgeblendet ist, wenn sie über die GUI gestartet wird. Dies lässt sich am besten beheben, indem Sie ein neues Terminalfenster öffnen. Der andere wird verfügbar, sobald gedit geschlossen wird. Sie können auch den oben vorgeschlagenen Schalter verwenden.

user175759
quelle
Ein neues Terminalfenster überfüllt nur den Desktop, selbst wenn es minimiert ist. Verwenden von & mit oder ohne Disown ist viel einfacher und sauberer.
Joe