Eu inicio aplicativos do Terminal com comandos como este:
/Applications/Mail.app/Contents/MacOS/Mail &
A parte importante é a &
.
Para Unix / Linux / Solaris:
- Eu aprendi na escola que adicionar o
&
faz o programa viver por conta própria. - Lembro-me fortemente de ter lançado um comando
xeyes &
e ter o programa em execução seguro, mesmo depois de fechar o shell.
- Eu aprendi na escola que adicionar o
No Mac OS X (dentro do Unix):
- Inicio um aplicativo
&
e fecho a janela do Terminal: o aplicativo sai! - Por que esse comportamento indesejável ocorre no Mac OS X?
- Como isso pode ser consertado ?
- Inicio um aplicativo
macos
terminal
applications
command-line
unix
Nicolas Barbulesco
fonte
fonte
Respostas:
A maneira "padrão" de realizar o que você deseja realizar (no OS X, Linux, FreeBSD ou outros sistemas) é usar o comando
nohup
:Isso iniciará
program
, que será executado em segundo plano em relação ao shell por causa dos&
- e ignorará os sinais de interrupção devido ao comando nohup.Dessa forma, o programa continuará sendo executado mesmo que você feche o shell. Não importa se você está fechando o shell porque está fechando o Terminal.app ou se está fechando o shell porque está desconectando de uma conexão ssh com o computador ou similar.
fonte
nohup.out
na pasta atual. Mesmo quando não há nada para escrever. Depois de algumas semanas, eu teria arquivosnohup.out
em todo lugar no meu Mac. :-(nohup command>/dev/null&
oucommand&disown
.Quando você fecha uma janela do terminal, ele envia um SIGHUP (sinal de interrupção) para o shell, que envia o SIGHUP para todos os processos iniciados . Esse é um comportamento tradicional para o bash e muitos outros shells, e a solução tradicional para isso é usar nohup.
Existem várias maneiras pelas quais diferentes máquinas Unix podem ser diferentes, portanto, é possível que os emuladores de terminal específicos que você usou ou os shells específicos que você usou tenham se comportado de maneira diferente. Mas não é específico para o OS X. Por exemplo, há uma pergunta sobre esse mesmo problema no Ubuntu.
fonte
Usando o "e comercial"
&
", você está dizendo ao Terminal para executar o processo em segundo plano do próprio shell. Assim, quando você fecha o shell (e mata o processo), a GUI (Mail.app em si) também fecha.O comando correto para iniciar o Mail a partir do terminal é simplesmente:
Edit: Acabei de encontrar isso no U&L Stack Exchange: O que significa e comercial no final de uma linha de script de shell? As respostas fornecidas são excelentes e explicam exatamente o que está acontecendo com mais detalhes e melhor do que eu jamais pude! Eu recomendo a leitura.
fonte
/Users/nicolas/Desktop/Firefox-29-fr/Firefox.app/Contents/MacOS/firefox -profile "/Users/nicolas/Desktop/Firefox-29-fr/Profil-Firefox-29-fr/" -no-remote &
/Applications
, mas em um caminho específico? Assim:/Users/nicolas/Desktop/Firefox-29-fr/Firefox.app/Contents/MacOS/firefox -profile "/Users/nicolas/Desktop/Firefox-29-fr/Profil-Firefox-29-fr/" -no-remote &
open -a Applications/Mail.app/Contents/MacOS/Mail; exit
O @jksoegaard possui os comandos adequados, mas como você mencionou no comentário, ele cria um arquivo nohup.out. Para impedir que o arquivo nohup.out seja criado, é necessário redirecionar STDOUT e STDERR para outro lugar. O comando completo seria
nohup program &>/dev/null &
. Isso executará seu programa em segundo plano, ignorando o SIGHUP e enviando todos os STDOUT e STDERR para / dev / null.No entanto, se você não se lembrou de adicionar nohup (como na sua pergunta original), pode usar o
disown -arh
comando para marcar todos os trabalhos em execução em segundo plano para ignorar o SIGHUP.fonte
Eu encontrei a solução :
(/Applications/Mail.app/Contents/MacOS/Mail &)
É simples, é bonito e funciona!
Os parênteses
( )
iniciam o comando em uma subcasca.fonte
Ou você pode tentar
open -a /Applications/Mail.app
fonte
Eu encontrei uma solução: combater o mal com o mal.
Eu inicio meu aplicativo com este tipo de comando:
/Applications/Mail.app/Contents/MacOS/Mail & exit
O shell sai de uma só vez. E o aplicativo sobrevive, mesmo depois de fechar a janela do Terminal.
Mas esta solução não é muito útil.
fonte
/Applications
incluídos no meu Mac..app
as pastas são chamadas de "pacotes" e oopen
comando pode iniciá-las, estejam elas na/Applications
pasta ou em qualquer outra pasta. O termo "pacote configurável" neste contexto não significa "enviado com o OS X".