¿Cómo ejecutar comandos opcionalmente en segundo plano con bash?

Quiero ejecutar un conjunto de comandos. opcionalmente en segundo plano y con bash. Algo como esto

#!/bin/bash
BGR=""
if [ foo ] ; then
   BGR=\&
fi
cmd1 $BGR
cmd2 $BGR
cmd3 $BGR
wait

Pero esto no parece posible con bash. Si foo es cierto, los comandos se evalúan como

+ cmd1 '&'
+ cmd2 '&'
+ cmd3 '&'

entonces el & es solo otro argumento.

¿Hay alguna otra forma de lograrlo? Además de la duplicación de código, donde escribo bloques if/then/else con el comportamiento diferente.

preguntado el 27 de julio de 12 a las 18:07

2 Respuestas

Puede mover la cláusula if-else a una función para evitar la duplicación de código, por ejemplo:

function execute() {
    if [[ -n "$BGR" ]]; then
        "$@" &
    else
        "$@"
    fi
}

execute cmd1 arg1
execute cmd2 arg2

Respondido 27 Jul 12, 18:07

eval cmd1 $BGR
eval cmd2 $BGR
eval cmd3 $BGR
wait

contestado el 22 de mayo de 13 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.