Como eu uso o nohup e rabo em um comando

3

Em vez de:

  nohup ./script.sh &
  tail -f nohup.out

Eu quero fazer:

nohup ./script.sh &; tail -f nohup.out

mas não funciona porque você precisa pressionar return após chamar nohup.

    
por Paul Taylor 08.02.2017 / 22:08

3 respostas

3

Em bash , dash e pdksh , o & termina a linha de comando nohup ./script.sh , então você não pode ter ; depois disso.

Com ; , você receberá

bash: syntax error near unexpected token ';'

assim como você vai conseguir se você tentar executar o comando ; por si mesmo.

Em ksh93 e zsh , seu comando funciona bem como está.

Para bash e as outras shells, faça isso:

$ nohup ./script.sh & tail -f nohup.out

Entretanto, esteja ciente de que, da mesma maneira que ao executar um pipeline, as diferentes partes do pipeline são iniciadas (mais ou menos) ao mesmo tempo. Se tail for iniciado antes do arquivo nohup.out existir, ele falhará com algo como

tail: nohup.out: No such file or directory 

Para contornar isso:

$ nohup ./script.sh & sleep 1 && tail -f nohup.out

ou, se você não gosta de esperar por um segundo:

$ nohup ./script.sh & while ! test -f nohup.out; do :; done && tail -f nohup.out

ou, como "VPfB" aponta nos comentários abaixo,

$ nohup ./script.sh >output & tail -f output
    
por 13.02.2017 / 17:09
0

Simule a chave de retorno antes de executar o nohup:

echo -e "\n" | nohup ./script.sh & tail -f nohup.out

script de exemplo:

[$]› cat tmp1.sh
#!/bin/bash
for i in {1..10}; do echo $i; sleep 1; done

resultado:

[$]› echo -e "\n" | nohup ./tmp1.sh & tail -f nohup.out
[3] 25402
nohup: appending output to 'nohup.out'
1
2
3
4
5
6
7
8
9
10

[3]   Done                    echo -e "\n" | nohup ./tmp1.sh
    
por 13.02.2017 / 12:59
0

Não consigo reproduzir seu problema. "& amp ;;" pode ser o erro.

nohup ./script.sh & tail -f nohup.out

Mas se a cauda for muito rápida para começar:

nohup ./script.sh & sleep 1 ; tail -f nohup.out
    
por 13.02.2017 / 16:46

Tags