2015-05-22 5 views
0

Какой будет правильный формат для следующего, где я хочу выполнить два сценария? Только выполняет первый для меня следующее:Запустить две команды оболочки

if ps aux | grep -E "[a]ffiliate_download.py|[g]oogle_download.py" > /dev/null 
then 
    echo "Script is already running. Skipping" 
else 
    exec "$DIR/affiliate_download.py" 
    exec "$DIR/google_download.py" 
fi 
+0

ли вы имеете в виду, что это только запуск первой команды при достижении 'else'? – kaybee99

+0

@ kaybee99, 'exec' заставляет оболочку заменить себя процессом, который будет запущен, так что это нормальное/ожидаемое поведение здесь. –

ответ

5

Команда exec заменяет текущий процесс оболочки с программой он работает. Поскольку оболочка больше не работает, она не может запускать команды после этого.

Просто выполните команды, как правило:

else 
    "$DIR/affiliate_download.py" 
    "$DIR/google_download.py" 
fi 
+0

В чем разница между командой 'exec 'команды' 'и' '' '? – David542

+0

@ David542, разница заключается в том, что 'exec' заменяет запись таблицы операций оболочки новой командой - поэтому оболочка больше не работает, а сигналы, отправленные на ее PID, принимаются программой, которую она заменяет. –

+1

@ David542 Когда вы запускаете программу в обычном режиме, она запускается в новом процессе, и оболочка ждет ее завершения (или не дожидается, если вы поместите ее в фон с помощью '&'). Когда вы запускаете его с помощью 'exec', он запускается в процессе оболочки, полностью заменяя оболочку. – Barmar

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