2016-03-16 3 views
4

У меня есть код ниже Vagrantfile, который вызывает сценарий ниже. Сценарий работает до последней строки source $dotfile. Когда он доходит до source, сценарий говорит source: not found. Линия до, cat $dotfile работает просто отлично, поэтому файл явно существует.Источник не найден на Vagrant up

Почему этот файл каким-то образом не найден для команды source, но он работает для предыдущей команды cat?

output error

==> default: /vagrant/scripts/create_functions_dotfile.sh: 14: /vagrant/scripts/create_functions_dotfile.sh: source: not found 

Vagrantfile

config.vm.provision "#{script["name"]}", type: "shell" do |shell| 
    shell.inline = "/bin/sh /vagrant/scripts/create_functions_dotfile.sh" 
end 

scripts/create_functions_dotfile.sh

#!/bin/sh 

dotfile=/home/vagrant/.functions.sh 

for file in /vagrant/scripts/functions/*; do 
    echo "cat $file >> $dotfile" 
    cat $file >> $dotfile 
done 

echo "source $dotfile" >> /home/vagrant/.bashrc 
cat $dotfile 
source $dotfile 
+0

WRT предлагаемое изменение, которое изменило код в ответе, [предлагаемое чтение] (http://meta.stackoverflow.com/a/266479/1677912). – Mogsdad

ответ

4

Источник специфичен для #!/Bin/Баш, так как вы

  1. заменителем

    #!/bin/sh 
    

    с

    #!/bin/bash 
    
  2. заменителем

    source $dotfile 
    

    с

    . $dotfile 
    

ETA: на самом деле ошибка жалуется, что «источник» не найден, а не его аргумент.

+0

Это исправлено. Спасибо. Я использовал 'sh', потому что думал, что прочитаю, что' sh' был более портативным и автоматически указывал на 'bash'. – merlinpatt