Я пытаюсь позвонить

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 в фоновом режиме и продолжать цепочку после этого; Каков синтаксис для фонового в функции (не псевдоним)? Спасибо

2 ответа2

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
}

... который я предпочитаю, потому что мне легче читать.

0

Вы можете создать фоновую функцию, как в программе

imahappyfunction()
{
    sleep 50000
}

imahappyfunction &

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .