Cómo ejecutar múltiples comandos usando nohup

41

Necesito ejecutar múltiples comandos usando nohup. Cada comando debe ejecutarse después del comando anterior.

Usé este comando como ejemplo:

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

Sin embargo, ese comando no funcionó.

¿Qué comando debo usar para este propósito?

Ehsan
fuente

Respuestas:

56

Envuélvelo en sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &
jw013
fuente
1
cuando inicio nohup me sale "nohup: ignorando la entrada y redirigiendo stderr a stdout", entonces ¿no es redundante "2> & 1"?
harschware
1
Probablemente. Creo que cuando escribí la respuesta, simplemente la copié de la pregunta.
jw013
6

¿No sería mucho más sencillo crear su lista de comandos en un archivo shell separado, por ejemplo, command.sh, sin ningún tipo de nohup?

Entonces llamas:

nohup bash command.sh
asalto
fuente
4

Otros ya han respondido sobre nohup. Como nota al lado práctico: Yo recomiendo hacer este tipo de cosas dentro de una screeno tmuxsesión. De esa manera puede desconectarse, luego volver a conectarse más tarde y ver la salida y el resultado final.

Detener el daño continuo a Mónica
fuente
1
Esta respuesta es excelente para escenarios interactivos, pero no tiene sentido para scripts o automatización.
Jonathan Hartley
0

Sería más simple así:

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

Sin embargo, esto puede causar problemas si las URL contienen caracteres especiales, por lo que para una opción más segura puede usar:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &
Didi Kohen
fuente
3
La única forma segura para pasar parámetros a sh -ces a través de argumentos separados, que pueden ser accesibles a través de los parámetros posicionales ( $0, $1, ...). No hay una manera fácil o sencilla de citar argumentos correctamente para el análisis de cadenas. Su intento de utilizar comillas dobles escapadas falla si en $urlsí contiene comillas dobles. Pruébelo a='problem"'; sh -c "echo \"$a\""usted mismo y vea: debería obtener un error de sintaxis porque sh -cintenta ejecutarse echo "problem"".
jw013
@ jw013 Por interés, su objeción se aplica igualmente a la respuesta aceptada por -oh. Por ti. Presumiblemente no, entonces. ¡Pero no entiendo por qué no! :-)
Jonathan Hartley
1
@ JonathanHartley No estoy seguro de entender tu pregunta. Si se compara esta respuesta a la mía cuidado que debe notar una diferencia en la forma $urly $url2se utilizan.
jw013
@ jw013 Ah, por supuesto. Estaba siendo tonto. Gracias por aclararme.
Jonathan Hartley