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?

Ehsan
fonte

Respostas:

56

Embrulhe-o em sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &
jw013
fonte
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
assaf
fonte
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.

Pare o dano contínuo a Monica
fonte
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 &
Didi Kohen
fonte
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