ejecutar comandos de función bash encadenados en segundo plano

0

Estoy intentando llamar

port() { fuser -k $1/tcp; python manage.py runserver $1 ;}
runproject() { cd $HOME/projects/$1 ; workon $1 ; port $2 & ; sleep 3 ; google-chrome 127.0.0.1:$2 ;}

( portes un servidor de estilo django). en la fuente se equivoca con

cchilders:~/projects/scriptamajig [master]$ src
bash: /home/cchilders/.bash_profile: line 134: syntax error near unexpected token `;'
bash: /home/cchilders/.bash_profile: line 134: `runproject() { cd $HOME/projects/$1 ; workon $1 ; port $2 & ; sleep 3 ; google-chrome 127.0.0.1:$2 ;} '

creo que mi google-chromecomando no se abrirá porque port $2ejecuta el servidor django y acapara la tubería de terminal. La sleepparte ni siquiera se ejecuta después de que se ejecuta el puerto. Quiero correr porten segundo plano y seguir encadenando después de eso; ¿Cuál es la sintaxis para el fondo en una función (no un alias)? Gracias

codyc4321
fuente

Respuestas:

1

Esto no se debe a la función, es a que estás encadenando múltiples comandos en una línea para ;separarlos. Pero &ya es un separador de comandos, y usar ambos sin un comando intermedio (como en ... port $2 & ; sleep 3 ...) es un error de sintaxis. Solución: elimine el redundante ;:

runproject() { cd $HOME/projects/$1 ; workon $1 ; port $2 & sleep 3 ; google-chrome 127.0.0.1:$2 ;}

O utilice saltos de línea como separadores de comandos, en lugar de ;:

runproject() {
    cd $HOME/projects/$1
    workon $1
    port $2 &
    sleep 3
    google-chrome 127.0.0.1:$2
}

... que prefiero, porque me resulta más fácil de leer.

Gordon Davisson
fuente
0

Puede crear una función bash en segundo plano como lo haría con un programa

imahappyfunction()
{
    sleep 50000
}

imahappyfunction &
Un poco de nerd de Linux
fuente