Questão Executar programa em segundo plano no bash sem controle de tarefas


Eu frequentemente executo programas GUI, como o firefox e o evince from shell. Se eu digitar "firefox &", o firefox é considerado como um trabalho bash, então "fg" irá trazê-lo para o primeiro plano e "travar" o shell. Isso se torna irritante quando tenho alguns trabalhos em segundo plano, como o vim, já em execução.

O que eu quero é lançar o firefox e desassociá-lo com o bash. Considere o seguinte caso ideal com meu runbg imaginário:

$ vim foo.tex
ctrl+z and vim is job 1
$ pdflatex foo
$ runbg evince foo.pdf
evince runs in background and I get me bash prompt back
$ fg
vim goes foreground

Existe alguma maneira de fazer isso usando o programa existente? Se não, vou escrever meu próprio runbg.


1


origem


nohup e disown não é o que você procura? - slhck
Observe que você pode especificar o trabalho que deseja mover para o primeiro plano, ou seja, fg %1. - cYrus


Respostas:


Que tal agora?

( firefox & )

Isso parece mantê-lo fora da mesa de trabalhos, e fg não posso ver nada disso.


3



Funciona. ideia inteligente. - Wu Yongzheng


Faça isso:

bash$ firefox &
bash$ disown

Bash se esqueceu do trabalho em segundo plano que você acabou de criar.


1



Isso é exatamente o que eu quero. Obrigado. - Wu Yongzheng
Depois de usá-lo por algum tempo, eu não conseguia me acostumar com isso. O problema é que eu tenho que especificar o número do trabalho. deserdar sem argumento não separa o trabalho de segundo plano anterior, mas o "trabalho atual", que eu achei estranhamente definido. - Wu Yongzheng
Acredito que o trabalho de segundo plano mais recente é sempre o trabalho atual, a menos que você altere o trabalho atual antes de digitar disown. - Fran
Oi Fran, tente isso. 1. vim foo; 2. barra de gedit &; 3. negar; 4. fg. O passo 3 renega o vim e o passo 4 traz o gedit para o primeiro plano. Depois de ler o manual bash, ainda não sei por que o bash considera o vim como o trabalho atual na etapa 3. - Wu Yongzheng