Non riesco a usare il terminale mentre il comando gedit è in esecuzione


44

Di recente ho installato 12.04.
Quando provo a modificare un file con gedit , non posso usare il terminale fino a quando non chiudo il file di modifica o devo aprire un nuovo terminale. Ma penso di non aver avuto questo problema con 11.04, tuttavia non ne sono sicuro.
C'è comunque modo di evitarlo e di usare lo stesso terminale durante la modifica dei file.

Risposte:


81

Risposta breve

Nel terminale che non risponde:

  1. Premi Ctrl+ Z.
  2. Digita bge inserisci.
  3. Digita disowne inserisci.

Risposta lunga

Nel terminale che non risponde, premi Ctrl+ Z, questo "metterà in pausa" il processo (o "lavoro") e ti restituirà il controllo della console. Tuttavia, noterai che geditnon risponde e non puoi usarlo.

Extra : se si desidera, è possibile eseguire il comando jobs, si noterà che leggerò fermato per il geditcomando, è per questo che non è possibile utilizzarla.

Per eseguire correttamente il processo in background (ovvero per rendere geditnuovamente reattivo), eseguire il comando bg(che significa sfondo). Ora sarai in grado di utilizzare gedite allo stesso tempo avere il prompt per te stesso.

Extra : ora, se lo esegui jobs, noterai che leggerà Running .

Puoi superare tutto questo fin dall'inizio. Quando si avvia geditdal terminale, aggiungere un &alla fine del comando, quindi qualcosa del genere gedit /path/to/file &. Questo verrà avviato geditin background dal primo posto (potrebbe essere necessario colpire Enterun paio di volte per riavere il controllo della console).

Extra : se seguissi queste note extra, potresti aver notato che la seconda volta che l'hai fatto jobs, potresti vedere che bash ha aggiunto &a alla fine del geditcomando.

Una volta che ti sarai abituato a questo sistema, potresti notare che se chiudi il terminale, anche gedit termina, senza nemmeno una finestra di dialogo di conferma. Per evitare che ciò accada, eseguire disown, che staccherà il processo gedit dal terminale, rimuovendolo dall'elenco restituito da jobs.


2
Mi ha sempre sorpreso il fatto che non c'è modo di mettere immediatamente in background un processo in esecuzione in primo piano. È necessario mettere in pausa in primo luogo, che a volte non è praticabile.
detenere il

@detly leggi di nuovo la parte "Puoi superare ..."!
Guntbert,

@guntbert - Non aiuta se il processo è già in esecuzione ...
Detly

45

Basta digitare:

gedit <filename-to-edit> &

Ciò restituirà immediatamente il prompt dei comandi.


5
Questo è un linguaggio unix importante, e vale la pena conoscerlo. In questo modo è possibile eseguire qualsiasi comando in background. Gli strumenti che sono interattivi ovviamente saranno confusi da questo trattamento, ma per esempio bubblesort war_and_peace.txt% permetterà al tuo selezionatore di lanciarsi al capolavoro (per molto, molto tempo) mentre continui con il tuo lavoro (diciamo, implementando quicksort o qualcosa del genere)
Jon Kiparsky il

1
@JonKiparsky Esempio divertente - fa il punto.
Joe,

25

È possibile utilizzare il nohupper impedire che la GUI sia collegata a un terminale:

nohup mupdf some.pdf &

Ciò ti consentirà di chiudere il terminale dal quale stai avviando, senza che il programma venga chiuso.

Dovresti anche notare che il comando nohup creerà un file con il comando stdoute stderrdel comando che esegui. Se vuoi impedirlo, aggiungi &>/dev/nullprima di &.

nohup mupdf some.pdf &>/dev/null &

4
"nohup" sta per "no hang up". Ciò risale ai primi Unix, quando i terminali (fisici) venivano regolarmente collegati tramite linee telefoniche e quindi si chiudeva un terminale riagganciando il telefono.
Salterio,

3
Ulteriori informazioni: il comando nohup creerà un file nohup.outcontenente l'output del comando. Ciò è utile se si desidera visualizzare i messaggi di errore. Se non si desidera creare il file, aggiungere il reindirizzamento come segue:nohup mupdf some.pdf &>/dev/null &
Paddy Landau,

19

Puoi anche usare il disowncomando. È particolarmente utile quando hai già avviato il processo che non desideri più collegare al terminale.

La procedura di base, se ricordo bene, è qualcosa del genere:

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

Si noti che il rifiuto è bashspecifico.

Questo post sul blog spiega abbastanza bene entrambi i metodi.

Pagina man da rinnegare


Una scorciatoia:firefox & disown
Flimm,

13

Da man gedit:

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

Quindi, se si esegue geditcon l' -bopzione, inizierà in background:

gedit -b [FILE-NAME]

Inoltre, successivamente puoi creare un alias per gedit -b(vedi qui come creare un alias permanente):

alias gedit='gedit -b'

Da adesso, in futuro puoi usarlo gedit [FILE-NAME]normalmente e inizierà in background.


2
È una cattiva idea usare l'alias per ridefinire i comandi comuni. Troverai molti thread al riguardo su stackexchange. Va bene usare un alias con un nome diverso. In poche parole, l'alias dei comandi esistenti crea comportamenti imprevisti sulla tua macchina se qualcun altro lo usa mai (come quando cerchi di aiutarti a risolvere qualche altro problema) e ti fa la stessa cosa quando usi un altro sistema senza quegli alias e i tuoi comandi non lavorare come previsto. Uno dei figli del poster per questo è alias rm = 'rm -i'. Ti abitua a cancellare le cose con una seconda possibilità che non è sempre lì.
Joe,

10

Basta digitare:

gedit FILENAME & disown

La fine di un comando con &in bash esegue quel comando in background. Tuttavia, tale processo è ancora collegato al terminale.

Senza disown, se chiudi il terminale, gedit si chiuderà, senza nemmeno chiederti di salvare un file modificato. disownstacca il processo in background dal terminale corrente, in modo che se chiudi il terminale, gedit continuerà a funzionare normalmente. Ho scoperto che mi sbagliavo, questo non è il caso di bash, ma è il caso di zsh. Hai ancora bisogno di correre detachdopo averlo fatto ctrl- ze bg, comunque, anche in bash.

È possibile saperne di più circa i built-in jobs, disowne il &metacarattere nella pagina di manuale per il bashcomando diIcona Manpage , in particolare la sezione denominata "controllo dei job".


con disownsono stato in grado di mantenere il gedit aperto dopo la chiusura del terminale. Non ho capito quello che hai detto su "questo non è il caso di bash, ma è il caso di zsh"
KrIsHnA,

0

Ciò è probabilmente dovuto al fatto che hai aperto gedit tramite terminale. Quando lo fai, vedi l'output della riga di comando che è normalmente nascosto se avviato tramite la GUI. Il modo migliore per risolvere questo problema è aprire una nuova finestra del terminale. L'altro sarà disponibile dopo la chiusura di gedit. Puoi anche utilizzare l'opzione suggerita dall'utente sopra indicato.


Una nuova finestra del terminale ingombra semplicemente il desktop, anche se è ridotto a icona. Usare e con o senza rinnegare è molto più semplice e pulito.
Joe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.