Vagrantのshellプロビジョニングでよくsudoを使ったスクリプトを見かけますが、Shell Provisionerはデフォルトではrootで実行されるので基本的にsudoは不要だったりします。
自分もつい最近までvagrantユーザで実行されるものだと思い込んでいて全部sudoで書いていました。
(rootがsudoを使っても別にいいと思うので、どちらでも実行できるようにsudoで書いておくという考えもなくはないかもしれない)
Shell Scripts - Provisioning - Vagrant Documentation より:
privileged (boolean) - Specifies whether to execute the shell script as a privileged user or not (sudo). By default this is "true". This has no effect for Windows guests.
privilegedオプションがtrueだとrootで実行されるようです。そしてデフォルトはtrueと。
この辺を見ると(スクリプト自体が)sudoで実行されそうな感じが伝わってきます。
https://github.com/mitchellh/vagrant/blob/master/plugins/provisioners/shell/provisioner.rb#L87
こんな実験。
config.vm.provision "shell", inline: <<-SHELL
whoami #=> root
echo $HOME #=> /root
SHELL
config.vm.provision "shell", privileged: false, inline: <<-SHELL
whoami #=> vagrant
echo $HOME #=> /home/vagrant
SHELL
rootの時にsudoを実行してもたいして問題はありませんが、$HOMEを参照する際は注意が必要そうですね。というか/home/vagrantだと思い込んでいたのではまりました。
たぶん、デフォルトでこんなのが書かれているのが原因なんじゃないですかね。
(2016-07-22現在、sudoがない形にコメントのサンプルが修正されていました)
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get install -y apache2
# SHELL
sudo使ってるし。