![在后台运行链式 bash 函数命令](https://linux22.com/image/1489495/%E5%9C%A8%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C%E9%93%BE%E5%BC%8F%20bash%20%E5%87%BD%E6%95%B0%E5%91%BD%E4%BB%A4.png)
我正在尝试拨打
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 &