Como executar vários comandos usando nohup


41

Eu preciso executar vários comandos usando nohup. Cada comando deve ser executado após o comando anterior.

Eu usei este comando como um exemplo:

nohup wget $url && wget $url2 > /dev/null 2>&1 &

No entanto, esse comando não funcionou.

Que comando devo usar para esse fim?

Respostas:


56

Embrulhe-o em sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

11
Quando inicio o nohup, recebo "nohup: ignorando a entrada e redirecionando stderr para stdout". Portanto, o "2> & 1" não é redundante?
harschware 14/05

11
Provavelmente. Acho que quando escrevi a resposta, apenas a copiei da pergunta.
Jw013

6

Não seria muito mais simples criar sua lista de comandos em um arquivo shell separado, por exemplo, command.sh, sem nenhum nohup.

Então você chama:

nohup bash command.sh

4

Outros já responderam nohup. Como uma observação prática: eu recomendo fazer esse tipo de coisa em uma screenou tmuxsessão. Dessa forma, você pode desconectar e reconectar mais tarde e ver a saída e o resultado final.


11
Essa resposta é ótima para cenários interativos, mas não faz sentido para scripts ou automação.
22816 Jonathan Hartley

0

Seria mais simples assim:

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

No entanto, isso pode causar problemas se os URLs contiverem caracteres especiais, portanto, para uma opção mais segura, você pode usar:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &

3
A única maneira segura para passar parâmetros para sh -cé através de argumentos separados, que podem ser acessados através dos parâmetros de posição ( $0, $1...). Não há uma maneira fácil ou simples de citar argumentos corretamente para análise de string. Sua tentativa de usar aspas duplas escapadas falhará se $urlela própria contiver aspas duplas. Tente a='problem"'; sh -c "echo \"$a\""você mesmo e veja - você deve receber um erro de sintaxe porque sh -ctenta executar echo "problem"".
Jw013

@ jw013 Fora de interesse, sua objeção se aplica igualmente à resposta aceita por -oh. Por você. Presumivelmente não, então. Mas eu não entendo porque não! :-)
Jonathan Hartley

11
@ JonathanHartley Não sei se entendi sua pergunta. Se você comparar esta resposta com a minha com cuidado, deverá notar uma diferença no modo $urle $url2ser usado.
jw013

@ jw013 Ah, claro. Eu estava sendo bobo. Obrigado por me esclarecer.
Jonathan Hartley
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.