为什么在第一个exec语句之后返回?

时间:2014-10-21 20:56:01

标签: git bash shell

我有以下代码

echo 000
exec sudo -u ubuntu -i git --git-dir=/home/ubuntu/Avails/.git --work-tree=/home/ubuntu/Avails/ fetch origin
echo 111
exec sudo -u ubuntu -i git --git-dir=/home/ubuntu/Avails/.git --work-tree=/home/ubuntu/Avails/ merge origin/production
echo 222
exec sudo bash -c "STAGE=production $DIR/transporter_pulldown.py"
echo 333

它只打印000然后返回。为什么会这样?

1 个答案:

答案 0 :(得分:2)

如果您运行help exec,则显示:

Replace the shell with the given command.

由于这个原因,您的第一个echo打印000和下一个sudo会替换您的shell,因此sudo之后的任何内容都无法运行,因为shell已经消失(它已被sudo命令替换。

您可能不希望在脚本中使用exec并将其运行为:

echo '000'
sudo -u ubuntu -i git --git-dir=/home/ubuntu/Avails/.git --work-tree=/home/ubuntu/Avails/ fetch origin
echo '111'
sudo -u ubuntu -i git --git-dir=/home/ubuntu/Avails/.git --work-tree=/home/ubuntu/Avails/ merge origin/production
echo '222'
sudo bash -c "STAGE=production $DIR/transporter_pulldown.py"
echo '333'
相关问题