#bash #path #vagrant #vagrantfile
#bash #путь #vagrant #vagrantfile
Вопрос:
Какой путь к файлам выполняется на этапе подготовки vagrant?
В Vagrantfile для размещения файлов в нужных каталогах у меня есть config.vm.provision
, который запускает сценарий оболочки (пример: `path:».provision/setup.sh ‘).
setup.sh
Файл считывается из другого файла в той же папке для запуска по списку репозиториев git, файлы которых будут размещены на клиентском компьютере.
Скрипт отлично работает при тестировании вне Vagrant, но мне трудно найти, где я должен сказать, что он находится. Вот пример кода, вызывающего проблему:
filename='./provision/gitrepos'
exec 4<$filename
echo Start
while read -u4 p ; do
if [ ! -z "$p" ];
then
is_website $p
else
echo
echo "This line '#$p' is blank"
echo
fi
done
Проблема проявляется здесь: filename='./provision/gitrepos'
При выполнении a vagrant up
файл больше не рассматривается как находящийся на хост-компьютере, а где-то в другом месте. Но как мне найти местоположение файла, который находится в том же каталоге, что и setup.sh файл в первую очередь?
Я попробовал `filename=’./ gitrepos’, но, похоже, относительный путь не работает.
Как мне найти расположение этих папок и файлов, чтобы я мог получить к ним доступ на этапе подготовки?
Комментарии:
1. Для ясности, оба файла
setup.sh
иgitrepos
находятся в одном каталоге, но я не могу понять, как получить доступ к файлу, если Vagrant запускает скрипт.
Ответ №1:
Сценарий инициализации выполняется из /tmp
папки — если вы подключитесь к своей виртуальной машине по ssh и проверите временную папку, вы увидите что-то похожее vagrant-shell
на содержимое скрипта. Однако не все файлы из вашего каталога помещаются в /tmp
папку.
Если ваш файл gitrepos находится в каталоге вашего проекта, он по умолчанию является общим для /vagrant
каталога, поэтому вы можете читать оттуда
Если это не так, вам нужно создать определенную папку sync_folder, чтобы вы могли прочитать файл из виртуальной машины