Dies liegt nicht an der Funktion, sondern daran, dass Sie mehrere Befehle in einer Zeile verketten und diese voneinander ;
trennen. Ist &
aber bereits ein Befehlstrennzeichen, und die Verwendung beider Befehle ohne Befehl dazwischen (wie in ... port $2 & ; sleep 3 ...
) ist ein Syntaxfehler. Lösung: Entweder das Redundante entfernen ;
:
runproject() { cd $HOME/projects/$1 ; workon $1 ; port $2 & sleep 3 ; google-chrome 127.0.0.1:$2 ;}
Oder verwenden Sie Zeilenumbrüche als Befehlstrennzeichen anstelle von ;
:
runproject() { cd $HOME/projects/$1 workon $1 port $2 & sleep 3 google-chrome 127.0.0.1:$2 }
... was mir lieber ist, weil ich es leichter zu lesen finde.