2015-04-13 5 views
3

Как заставить Vagrantfile добавлять содержимое файла в файл ~/.bashrc?Почему брандмауэр-ассистент не модифицирует ~/.bashrc?

В моем файле Vagrantfile я пытаюсь добавить содержимое файла/vagrant/dev_env_config в файл ~/.bashrc.

Когда я запустил vagrant up, он выводит инструкцию echo И выводит ожидаемое содержимое файла ~/.bashrc .... так что я знаю, что он читает файл dev_env_config и APPEARS, добавляя его.

Однако, когда я затем запустить vagrant ssh, а затем cat ~/.bashrc файл ~/.bashrc файл не изменялся, то по умолчанию ~/.bashrc файла по

Другими словами модники в файл ~/.bashrc теряются где-то между когда бродячие работает provison и когда я бегу vagrant ssh

# Vagrantfile 

Vagrant.configure("2") do |config| 
    ... various cmds to set box and network... 
    $install_user_vars = <<SCRIPT 
     sudo cat /vagrant/dev_env_config >> ~/.bashrc 
     echo "*** here is the .bashrc file:" 
     cat ~/.bashrc 
SCRIPT 
    config.vm.provision "shell", inline: $install_user_vars 
end 

ответ

3

Я думаю, что происходит это скрипт инициализации запускается с правами администратора (или Судо), так что «~» местоположение дома на самом деле/​​корень, а не пользователя по умолчанию местонахождение дома/дом/бродяга.

Я могу придумать несколько способов решить эту:

Во-первых (и, вероятно, самый простой) должен быть четко о пути .bashrc, как:

# Vagrantfile 

Vagrant.configure("2") do |config| 
    ... various cmds to set box and network... 
    $install_user_vars = <<SCRIPT 
     sudo cat /vagrant/dev_env_config >> /home/vagrant/.bashrc 
     echo "*** here is the .bashrc file:" 
     cat /home/vagrant/.bashrc 
SCRIPT 
    config.vm.provision "shell", inline: $install_user_vars 
end 

Второй вариант может быть запустите эту часть сценария инициализации как непривилегированный пользователь. См. «Привилегированный» вариант на странице документов Shell Scripts.

+0

Бинго, делая путь явным работает отлично, спасибо! В этом случае reaplceing все экземпляры ~/.bashrc с /home/vagrant/.bashrc – jpwynn

+0

это отлично поработало, спасибо – Drew

1

Первичное решение - установить путь к .bashrc явно. Как правило, по умолчанию имя пользователя, пользователь SSH (который будет использоваться для vagrant ssh действия) является vagrant так:

$install_user_vars = <<SCRIPT 
     sudo cat /vagrant/dev_env_config >> /home/vagrant/.bashrc 
     echo "*** here is the .bashrc file:" 
     cat /home/vagrant/.bashrc 
SCRIPT 

Кроме того, я не уверен, что это необходимо использовать команду sudosudo cat ...). Возможно, вам это не нужно, но зависит от того, какой пользователь используется для запуска сценария обеспечения. Я думаю, это также vagrant.

Так что, если это действительно vagrant вы можете оставить путь к .bashrc немодифицированного (~/.bashrc), но должны удалить sudo cat ... команду и использовать простые cat ... вместо этого. И это более чистое решение, на мой взгляд. Потому что на самом деле мы не должны использовать разрешения sudo (root) без необходимости.

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