2014-10-21 6 views
0

Я пытаюсь сделать следующее:Правильный синтаксис для Баш Exec

if ps aux | grep "[t]ransporter_pulldown.py" > /dev/null 
then 
    echo "Script is already running. Skipping" 
else 
    exec "sudo STAGE=production $DIR/transporter_pulldown.py" # this line errors 
fi 

$ sudo STAGE=production $DIR/transporter_pulldown.py работы в командной строке, но в Баш скрипт дает мне:

./transporter_pulldown.sh: line 9: 
exec: /Users/david/Desktop/Avails/scripts/STAGE=production 
/Users/david/Desktop/Avails/scripts/transporter_pulldown.py: 
cannot execute: No such file or directory 

Что бы правильный синтаксис здесь?

+0

Вы точно знаете, что делает 'exec'? Вероятно, вам это совсем не нужно. – chepner

ответ

2

sudo не является интерпретатором команд, поэтому он пытается выполнить первый аргумент как команду.

Вместо этого попробуйте:

exec sudo bash -c "STAGE=production $DIR/transporter_pulldown.py" 

Это создает использует новые bash процессы для интерпретации переменных и выполнить свой python сценарий. Также обратите внимание, что $DIR будет интерпретироваться оболочкой, которую вы вводите, а не исполняемой оболочкой. Чтобы заставить его интерпретироваться в новом процессе bash, используйте одинарные кавычки.

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