Não consigo usar o terminal enquanto o comando gedit está em execução

44

Eu instalei recentemente o 12.04.
Quando tento editar um arquivo com o gedit , não posso usar o terminal até fechar o arquivo de edição ou preciso abrir um novo terminal. Mas acho que não tive esse problema com o 11.04, mas não tenho certeza.
Existe alguma maneira de evitar isso e usar o mesmo terminal durante a edição de arquivos.

Hossein Hosseinvand
fonte

Respostas:

81

Resposta curta

No terminal que não responde:

  1. Pressione Ctrl+ Z.
  2. Digite bge digite.
  3. Digite disowne digite.

Resposta longa

No terminal que não responde, pressione Ctrl+ Z, isso "pausará" o processo (ou "trabalho") e retornará o controle do console para você. No entanto, você notará que ele geditnão responde e não pode usá-lo.

Extra : se você quiser, pode executar o comando jobs, notará que ele lerá Parado para o geditcomando, é por isso que você não pode usá-lo.

Para fazer com que o trabalho seja executado com êxito em segundo plano (ou seja, para geditresponder novamente), execute o comando bg(ou seja, em segundo plano). Agora você será capaz de usar gedite, ao mesmo tempo, terá o prompt para si mesmo.

Extra : agora, se você executar jobs, notará que será exibido Executando .

Você pode superar tudo isso desde o início. Ao iniciar a geditpartir do terminal, adicione um &no final do comando, para algo assim gedit /path/to/file &. Isso será iniciado geditem segundo plano desde o primeiro lugar (talvez você precise pressionar Enteralgumas vezes para recuperar o controle do console).

Extra : se você estava seguindo essas notas extras, talvez tenha notado que, na segunda vez jobs, viu que o bash adicionou &a ao final do geditcomando.

Depois de se acostumar com esse sistema, você pode perceber que, se você fechar o terminal, o gedit também será encerrado, sem sequer um diálogo de confirmação. Para impedir que isso aconteça, execute disown, o que desanexará o processo gedit do terminal, removendo-o da lista retornada por jobs.

Alaa Ali
fonte
2
Sempre me surpreendeu o fato de não haver maneira de colocar em segundo plano imediatamente um processo que está sendo executado em primeiro plano. Você tem para pausá-lo em primeiro lugar, que às vezes não é viável.
detly
@ leia cuidadosamente a parte "Você pode superar ..." de novo!
guntbert
@guntbert - não ajuda se o processo já está em execução ...
detly
45

Basta digitar:

gedit <filename-to-edit> &

Isso retornará imediatamente o prompt de comando para você.

david6
fonte
5
Este é um idioma unix importante e vale a pena conhecer. Qualquer comando pode ser executado em segundo plano dessa maneira. As ferramentas interativas obviamente ficarão confusas com este tratamento, mas, por exemplo, bubblesort war_and_peace.txt% permitirá que seu classificador se afaste da obra-prima (por muito, muito tempo) enquanto você continua seu trabalho (por exemplo, implementando o quicksort ou algo assim)
Jon Kiparsky
1
@ JonKiparsky Exemplo divertido - faz o ponto.
21713 Joe Joe
25

Você pode usar o nohuppara impedir que a GUI seja conectada a um terminal:

nohup mupdf some.pdf &

Isso permitirá que você feche o terminal do qual está iniciando, sem que o programa seja fechado.

Você também deve observar que o comando nohup criará um arquivo com o stdoute stderrdo comando que você executa. Se você deseja impedir isso, adicione &>/dev/nullantes do &.

nohup mupdf some.pdf &>/dev/null &
Braiam
fonte
4
"nohup" significa "não desligue". Isso remonta ao início do Unix, quando terminais (físicos) eram regularmente conectados via linhas telefônicas e, portanto, você fecha um terminal desligando o telefone.
MSalters 12/08/13
3
Informações adicionais: O comando nohup criará um arquivo que nohup.outcontém a saída do comando. Isso é útil se você deseja visualizar as mensagens de erro. Se você não deseja que o arquivo a ser criado, o redirecionamento add da seguinte forma:nohup mupdf some.pdf &>/dev/null &
Paddy Landau
19

Você também pode usar o disowncomando É particularmente útil quando você já iniciou o processo que não deseja mais anexar ao terminal.

O procedimento básico, se bem me lembro, é algo como isto:

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

Observe que o repúdio é bashespecífico.

Esta postagem no blog explica muito bem os dois métodos.

Página de manual por renúncia

jmathew
fonte
Um atalho:firefox & disown
Flimm
13

De man gedit:

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

Portanto, se você executar geditcom a -bopção, ela começará em segundo plano:

gedit -b [FILE-NAME]

Além disso, em seguida, você pode criar um alias para gedit -b(veja aqui como criar um alias permanente):

alias gedit='gedit -b'

A partir de agora, no futuro você poderá usá- gedit [FILE-NAME]lo normalmente e ele começará em segundo plano.

Radu Rădeanu
fonte
2
É uma má idéia usar alias para redefinir comandos comuns. Você encontrará muitos tópicos sobre isso no stackexchange. Não há problema em usar um alias com um nome diferente. Em poucas palavras, usar o alias dos comandos existentes cria um comportamento inesperado em sua máquina se alguém o usa (como quando tenta ajudá-lo a corrigir outro problema) e faz o mesmo quando você usa outro sistema sem esses alias e seus comandos não funcione como você espera. Um dos filhos posteres para isso é o pseudônimo rm = 'rm -i'. Você se acostuma a excluir coisas com uma segunda chance, que nem sempre existe.
21713 Joe Joe
10

Basta digitar:

gedit FILENAME & disown

Terminar um comando com &no bash executa esse comando em segundo plano. No entanto, esse processo ainda está anexado ao terminal.

Sem disown, se você fechar o terminal, o gedit será fechado, sem solicitar que você salve um arquivo editado. disowndesanexa o processo em segundo plano do terminal atual, de modo que, se você fechar o terminal, o gedit continuará funcionando normalmente. Acontece que eu estava errado, esse não é o caso do bash, mas é o caso do zsh. Você ainda precisa correr detachdepois de fazer ctrl- ze bg, no entanto, mesmo no bash.

Você pode descobrir mais sobre os built-ins jobs, disowne o &metacharacter na página de manual para o bashcomandoÍcone da página de manual , especialmente a seção chamada "controle de trabalho".

Flimm
fonte
com disowneu era capaz de manter o gedit aberto após o terminal ser fechado. Eu não consegui o que você disse sobre "este não é o caso para a festança, mas é o caso para zsh"
Krishna
0

Provavelmente é porque você abriu o gedit via terminal. Ao fazer isso, você vê a saída da linha de comando que normalmente fica oculta se iniciada pela GUI. A melhor maneira de corrigir isso é abrir uma nova janela do terminal. O outro ficará disponível após o fechamento do gedit. Você também pode usar a opção sugerida pelo usuário acima.

user175759
fonte
Uma nova janela de terminal apenas atravessa a área de trabalho, mesmo que seja minimizada. Usar e com ou sem renúncia é muito mais simples e limpo.
21413 Joe