Eu tenho um script que está sendo executado em um terminal e imprime alguma saída. Quero enviá-lo para segundo plano sem pressionar uma tecla (e sem modificação de script) após 5 segundos, por exemplo. Algo como um script bash que inicia meu script, dorme por algum tempo e envia o aplicativo em execução para segundo plano. Eu não me importo com a saída depois que ela entra em segundo plano.
UPD: O que NÃO funciona:
nohup
- Uso do
&
script after - ele o envia para o plano de fundo imediatamente enquanto a saída ainda vai para o terminal (é isso que eu quero evitar)
Não há maneiras não-hackeadas de redirecionar a saída de outro processo em outro lugar [1], mas se a) você não planeja trazer seu processo de volta ao primeiro plano e b) está OK com outro processo (um leve
cat
) também em execução durante todo o tempo em que seu programa é executado, isso pode fazer:Você pode querer redirecionar o stderr e o stdout do seu programa para o pipe com
your_program 2>&1
.[1] a possível maneira hacky é anexar um depurador a ele e redirecionar sua saída de dentro dele.
Agora vejo um grande mal-entendido: pensei que o trabalho deveria começar em primeiro plano e mudar para segundo plano magicamente após 5 segundos, e a saída não importa . Com esta resposta, porém, a saída continua ... Q parece igual a "fundo" com "sem saída". Bem, isso é interessante de qualquer maneira:
Com este script auxiliar 'suspender'...
...Posso suspender um script chamado 'counter.sh' e reiniciá-lo em segundo plano. A chamada é:
"Suspender" inicia em segundo plano e espera um segundo até que o contador seja executado. Ele pega o pid e espera 3 segundos (o atraso conforme solicitado). O sinal STOP corresponde a
ctrl-Z
, CONT abg
. O sono entre é necessário.Counter é um programa que você quer assistir por alguns segundos e muitas vezes ctrl-c nele. Após cinco segundos, deve liberar o prompt. A saída não importa. Isso imprime apenas 10 números, ficando mais lento.
Com as mensagens de controle de trabalho e a saída continuando, isso não parece muito bom.
Antes da ação suspend-resume-in-bg você pode parar o script com ctrl-c, e depois você pode usar o prompt. Quase faz sentido...
Você pode criar um arquivo de configuração .desktop e vinculá-lo ao arquivo bash. Com isso, você pode executar o arquivo shell e ele não será aberto no terminal. Apenas certifique-se de alterar
Terminal=True
paraTerminal=False
Para não abrir no terminal. Digite o abaixo em um arquivo chamado "anyfile.dekstop" e torne-o executável (clique com o botão direito - propriedades - permite executar o arquivo como programa)[Entrada na área de trabalho]
Versão=1.0
Exec="caminho para seu arquivo executável ou arquivo .sh"
Nome=Amostra
GenericName=Amostra
Comentário=Qualquer comentário
Codificação=UTF-8
Terminal=falso
Tipo=Aplicativo
Categories=Aplicativo
Ícone = qualquer link de ícone