Nie mogę korzystać z terminala, gdy uruchomione jest polecenie gedit

44

Niedawno zainstalowałem 12.04.
Kiedy próbuję edytować plik za pomocą gedit , nie mogę korzystać z terminala, dopóki nie zamknę pliku edycji lub nie będę musiał otworzyć nowego terminala. Ale myślę, że nie miałem tego problemu z 11.04, jednak nie jestem pewien.
Czy mimo to można tego uniknąć i używać tego samego terminala podczas edycji plików.

Hossein Hosseinvand
źródło

Odpowiedzi:

80

Krótka odpowiedź

W niereagującym terminalu:

  1. Hit Ctrl+ Z.
  2. Wpisz bgi wpisz.
  3. Wpisz disowni wpisz.

Długa odpowiedź

W nieodpowiadającym terminalu naciśnij Ctrl+ Z, to „wstrzyma” proces (lub „zadanie”) i zwróci ci kontrolę nad konsolą. Zauważysz jednak, że geditprzestaje odpowiadać i nie możesz z niego korzystać.

Dodatkowo : jeśli chcesz, możesz wykonać polecenie jobs, zauważysz, że będzie ono brzmiało Zatrzymane dla geditpolecenia, dlatego nie możesz go użyć.

Aby zadanie zakończyło się powodzeniem w tle (tj. Aby geditponownie odpowiedzieć), wykonaj polecenie bg(w tle). Będziesz teraz mógł korzystać gedit, a jednocześnie wyświetlać odpowiedni monit.

Dodatkowo : teraz, jeśli wykonasz jobs, zauważysz, że będzie czytać Uruchomienie .

Możesz przezwyciężyć to wszystko od samego początku. Kiedy uruchamiasz geditz terminala, dodaj &na końcu polecenia, więc coś takiego gedit /path/to/file &. To uruchomi się geditw tle od samego początku (może być konieczne Enterkilkukrotne naciśnięcie, aby przywrócić kontrolę nad konsolą).

Dodatkowo : jeśli postępujesz zgodnie z tymi dodatkowymi notatkami, możesz zauważyć, że po raz drugi zrobiłeś to jobs, zobaczyłeś, że bash dodał a &na końcu geditpolecenia.

Gdy przyzwyczaisz się do tego systemu, możesz zauważyć, że jeśli zamkniesz terminal, gedit również zakończy działanie, nawet bez okna dialogowego potwierdzenia. Aby temu zapobiec, uruchom disown, który odłączy proces gedit od terminala, usuwając go z listy zwracanej przez jobs.

Alaa Ali
źródło
2
Zawsze mnie zaskakuje, że nie ma możliwości natychmiastowego ustawienia tła procesu działającego na pierwszym planie. Ci mają wstrzymać go najpierw, co czasami nie jest opłacalne.
detly
@ przeczytaj ponownie część „Możesz pokonać ...” jeszcze raz!
guntbert
@guntbert - Nie pomaga, jeśli proces już działa ...
detly
44

Po prostu wpisz:

gedit <filename-to-edit> &

To natychmiast zwróci ci wiersz polecenia.

david6
źródło
5
Jest to ważny idiom unixowy i wart poznania. W ten sposób można uruchomić dowolne polecenie w tle. Narzędzia, które są interaktywne, oczywiście będą mylone przez to leczenie, ale na przykład bubbleort war_and_peace.txt% pozwoli twojemu sortownikowi obrócić arcydzieło (przez długi, długi czas) podczas pracy (powiedzmy, wdrażanie quicksort czy coś takiego)
Jon Kiparsky
1
@JonKiparsky Zabawny przykład - ma sens.
Joe
25

Możesz użyć, nohupaby zapobiec podłączeniu GUI do terminala:

nohup mupdf some.pdf &

Umożliwi to zamknięcie terminalu, z którego uruchamiasz, bez zamykania programu.

Należy również zauważyć, że polecenie nohup utworzy plik z stdouti stderrpolecenia biegu. Jeśli chcesz temu zapobiec, dodaj &>/dev/nullprzed &.

nohup mupdf some.pdf &>/dev/null &
Braiam
źródło
4
„nohup” oznacza „bez rozłączania się”. To sięga wczesnego Uniksa, kiedy (fizyczne) terminale były regularnie podłączane za pośrednictwem linii telefonicznych, dlatego też zamknąłbyś terminal przez odłożenie słuchawki.
MSalters
3
Informacje dodatkowe: Polecenie nohup utworzy plik nohup.outzawierający dane wyjściowe polecenia. Jest to przydatne, jeśli chcesz wyświetlić komunikaty o błędach. Jeśli nie chcesz, aby plik został utworzony, dodaj przekierowanie w następujący sposób:nohup mupdf some.pdf &>/dev/null &
Paddy Landau,
19

Możesz także użyć disownpolecenia. Jest to szczególnie przydatne, gdy już rozpocząłeś proces, którego nie chcesz już podłączać do terminala.

Podstawową procedurą, jeśli dobrze pamiętam, jest coś takiego:

$ > 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!

Zauważ, że disown jest bashspecyficzny.

Ten post na blogu całkiem dobrze wyjaśnia obie metody.

Strona podręcznika do odrzucenia

jmathew
źródło
Skrót:firefox & disown
Flimm,
13

Od man gedit:

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

Jeśli uruchomisz geditz -bopcją, rozpocznie się w tle:

gedit -b [FILE-NAME]

Ponadto możesz następnie utworzyć alias dla gedit -b(zobacz tutaj, jak utworzyć stały alias):

alias gedit='gedit -b'

Odtąd w przyszłości będziesz mógł używać gedit [FILE-NAME]go normalnie i zacznie on działać w tle.

Radu Rădeanu
źródło
2
Użycie aliasu do ponownego zdefiniowania typowych poleceń jest złym pomysłem. Znajdziesz wiele wątków na ten temat na stackexchange. Można użyć aliasu o innej nazwie. Mówiąc w skrócie, aliasing istniejących poleceń powoduje nieoczekiwane zachowanie na twoim komputerze, jeśli ktoś go kiedykolwiek użyje (na przykład podczas próby rozwiązania innego problemu) i robi to samo, gdy używasz innego systemu bez tych aliasów i twoich poleceń nie działają zgodnie z oczekiwaniami. Jednym z elementów podrzędnych tego plakatu jest alias rm = „rm -i”. Przyzwyczaja się do usuwania rzeczy z drugą szansą, która nie zawsze istnieje.
Joe
10

Po prostu wpisz:

gedit FILENAME & disown

Zakończenie polecenia za pomocą &bash uruchamia to polecenie w tle. Jednak proces ten jest nadal dołączony do terminala.

Bez disown, jeśli zamkniesz terminal, gedit zamknie się, nawet nie monitując o zapisanie edytowanego pliku. disownodłącza proces w tle od bieżącego terminala, więc jeśli zamkniesz terminal, gedit będzie działał normalnie. Okazuje się, że się myliłem, nie dotyczy to bash, ale dotyczy to zsh. Nadal musisz biegać detachpo zrobieniu ctrl- zi bgnawet w bash.

Możesz dowiedzieć się więcej na temat wbudowanego ins jobs, disowna &metaznaku w podręcznika do bashpoleceniaIkona strony , szczególnie sekcji oznaczonej „Sterowanie pracą”.

Flimm
źródło
z disownbyłem w stanie utrzymać gedit otwarty po zamknięciu terminala. Nie dostałem tego, co powiedziałeś o „nie chodzi o bash, ale tak jest w przypadku zsh”
KrIsHnA
0

Jest tak prawdopodobnie dlatego, że otworzyłeś gedit przez terminal. Gdy to zrobisz, zobaczysz wyjście wiersza poleceń, które normalnie jest ukryte, jeśli zostanie uruchomione przez GUI. Najlepszym sposobem, aby to naprawić, jest otwarcie nowego okna terminala. Drugi będzie dostępny po zamknięciu programu gedit. Możesz także użyć przełącznika sugerowanego powyżej przez użytkownika.

użytkownik175759
źródło
Nowe okno terminala po prostu zaśmieca pulpit, nawet jeśli jest zminimalizowane. Korzystanie z i bez disown jest znacznie prostsze i czystsze.
Joe