executando comandos de função bash encadeados em segundo plano

0

Estou tentando ligar

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 ;}

( port é um servidor de estilo django). na fonte, erros com

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 ;} '

meu comando google-chrome não abrirá, acho que port $2 executa o servidor django e ocupa o pipe do terminal. A parte sleep nem sequer é executada após a execução da porta. Eu quero correr port no fundo e manter o encadeamento depois disso; Qual é a sintaxe para o fundo em uma função (não um alias)? Obrigado

    
por codyc4321 08.04.2016 / 19:46

2 respostas

1

Isso não é devido à função, porque você está encadeando vários comandos em uma linha com ; separando-os. Mas & já é um separador de comando e usar ambos sem um comando no meio (como em ... port $2 & ; sleep 3 ... ) é um erro de sintaxe. Solução: remova o ; redundante:

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

Ou use quebras de linha como separadores de comando, em vez de ; :

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

... o que eu prefiro, porque acho mais fácil de ler.

    
por 08.04.2016 / 23:49
0

Você pode basear uma função bash como se fosse um programa

imahappyfunction()
{
    sleep 50000
}

imahappyfunction &
    
por 08.04.2016 / 22:06