2013-08-20 5 views
0

Я пытаюсь запустить пару команд в сценарии bash, но он будет зависать в моей команде, ожидая завершения (что не будет). этот скрипт просто убеждается в его запуске.Запустите команду в bash, а затем выйдите, не убив команду

#!/bin/bash 
ps cax | grep python > /dev/null 
if [ $? -eq 0 ]; then 
    echo "Process is running." 
else 
    echo "Process is not running... Starting..." 
    python likebot.py 
    echo $(ps aux | grep python | grep -v color | awk {'print $2'}) 
fi 

Как только он добирается до команды python, он зависает во время выполнения команды. его не до тех пор, пока я не скрою c до того, как он выдаст pid. так или иначе, я могу запустить этот сценарий bash и выйти из сценария bash после выполнения команд (не дожидаясь их завершения).

+1

Использование команды и после команды –

+0

Вы уже попробовали оператор '&'? – EverythingRightPlace

+0

Возможно, вы должны отправить это на http://codereview.stackexchange.com. Обратная связь, вероятно, научит вас много о программировании оболочки. –

ответ

6

В общем случае, если вы хотите выполнить команду и не дождаться ее, вы можете просто использовать & как разделитель, а не ; или новую строку. При этом pid этого процесса доступен оболочке в специальной переменной !. Если вы хотите дождаться завершения этого процесса, вы можете использовать wait. Если вы не хотите ждать его, просто опустите wait. В вашем случае:

python likebot.py & # Start command asynchronously 
echo $!    # echo the pid of the most recent asynchronous process 
1

Поскольку это выглядит как likebot должна быть всегда работает вы можете рассмотреть вопрос о «поЬир», а, с голой & работа еще ребенок вашего процесса входа в систему, и если это будет умирать умирает.

Смежные вопросы