Escrevi dois scripts de shell a.sh
e b.sh
. In a.sh
e b.sh
eu tenho um loop for infinito e eles imprimem alguma saída para o terminal. Quero escrever outro script que chame ambos a.sh
e, b.sh
mas quero que o usuário recupere o controle do terminal imediatamente, em vez de fazer o script rodar infinitamente e quero ocultar a saída no terminal.
linux
scripting
sh
background-process
Behnam Safari
fonte
fonte
nohup /path/to/your/script.sh parameter1 > & 1 &
Se alguém souber de uma maneira melhor./dev/null 2>&1
se estiver usando,nohup
pois ele já anexa todos os streams STDOUT e STDERR ao arquivo nohup.out automaticamente. Use apenas:nohup /path/to/your/command &
-bash: syntax error near unexpected token '&'
Redirecione a saída para um arquivo como este:
Isso irá redirecionar stdout e stderr para o mesmo arquivo. Se você deseja redirecionar stdout e stderr para dois arquivos diferentes, use isto:
Você pode usar
/dev/null
como um ou ambos os arquivos se não se importar com o stdout e / ou stderr.Veja a página de manual do bash para detalhes sobre redirecionamentos.
fonte
Desculpe, isso é um pouco tarde, mas encontrei a solução ideal para alguns comandos onde você não quer nenhuma saída padrão ou de erro (crédito onde é devido: http://felixmilea.com/2014/12/running-bash-commands-background -propriadamente / )
Isso redireciona a saída para nulo e mantém a tela limpa:
fonte
Se eles estiverem no mesmo diretório que seu script que contém:
O
&
no final é o que faz seu script rodar em segundo plano.A
> /dev/null 2>&1
parte não é necessária - ela redireciona os streams stdout e stderr para que você não precise vê-los no terminal, o que você pode querer fazer para scripts barulhentos com muita saída.fonte
Execute em um subshell para remover notificações e fechar STDOUT e STDERR:
fonte
[1] + 54765 done <emacs>
agradecimentoSe você deseja executar o script em um kickstart do Linux, você deve executar conforme abaixo.
fonte
fonte
-x
faz?Estes exemplos funcionam bem:
nohup sh prog.sh proglog.log 2> & 1 &
Para loop, você pode usar assim:
para i em {1..10}; do sh prog.sh; dormir 1; done prog.log 2> & 1 &
Ele funciona em segundo plano e não mostra nenhuma saída.
fonte