bash exec的正确语法

时间:2014-10-21 20:16:58

标签: bash shell

我正在尝试执行以下操作:

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在命令行上运行,但在bash脚本中它给了我:

./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

这里的语法是什么?

1 个答案:

答案 0 :(得分:2)

sudo并不是一个命令解释器,因此它试图将第一个参数作为命令执行。

而是试试这个:

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

这会创建一个新的bash进程来解释变量并执行python脚本。另请注意,$DIR将由您正在键入的shell而不是正在执行的shell进行解释。要强制在新的bash进程中解释它,请使用单引号。