¿Cómo poner sub shell y commands relacionados en el background?

Ejecuta una secuencia de commands en un subcontenedor como este:

(git pull;git rebase develop)&>/dev/null 

Creo que esto pondrá los processs secundarios y todos los secundarios creados por él en segundo plano, y devolverá el control al usuario.

Pero, en realidad, la terminal cuelga por un time, parece que es esperar a que los commands terminen en el subset.

Entonces, ¿alguien puede explicar por qué sucedió esto y cuál es la forma correcta de hacer este tipo de trabajo?

Si está ejecutando el shell bash , entonces &>/dev/null networkingirigirá la salida estándar y las secuencias de error a /dev/null (es lo mismo que >/dev/null 2>&1 ), pero no se ejecutará la ( ... ) subshell como un process asynchronous. Para eso, necesitarás agregar un extra & al final:

 (git pull; git rebase develop) &>/dev/null & 

ksh93 no tiene esta característica, y no está en POSIX.

Puede agregar sleep en su caso y & al final del command para ponerlos en segundo plano,

 (git pull; sleep 3; git rebase develop) &>/dev/null & 

Alternativamente puedes usar,

 for cmd in $commands do "$cmd" & done wait 

El & al final del command lo ejecuta en segundo plano, y la wait espera hasta que se completa la tarea de background.