在后台运行链式 bash 函数命令

在后台运行链式 bash 函数命令

我正在尝试拨打

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是 Django 风格的服务器)。在源代码中,它出错了

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

我的google-chrome命令无法打开,我想是因为port $2运行了 django 服务器并占用了终端管道。sleep端口运行后,该部分甚至不会运行。我想port在后台运行,然后继续链接;函数(不是别名)中的后台运行的语法是什么?谢谢

答案1

这不是由于函数,而是因为您在一行上链接了多个命令并用;分隔它们。但是&已经是命令分隔符,并且使用两者而中间没有命令(如... port $2 & ; sleep 3 ...)是语法错误。解决方案:删除多余的;:

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

或者使用换行符作为命令分隔符,而不是;

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

...我更喜欢这个,因为我发现它更容易阅读。

答案2

你可以像程序一样将 bash 函数置于后台

imahappyfunction()
{
    sleep 50000
}

imahappyfunction &

相关内容