Vagrantfile을 생성하는 bash 스크립트를 작성 중입니다. Vagrantfile을 생성하기 vagrant up
위해 bash 스크립트를 사용하는 이유 는 동료들이 실행하기 전에 단일 스크립트를 사용하여 환경을 설정할 수 있도록 하기 위함입니다.
예를 들어( setup-vagrant-host.sh
)
#!/bin/bash
.
.
.
some pre requisites steps
.
.
.
# Generate Vagrantfile
cat <<EOL > Vagrantfile
Vagrant.configure("2") do |config|
config.vm.define "vagrant-host"
config.vm.provision "shell", inline: <<-SHELL
sudo su
apt update
ipaddress=`hostname -I | awk '{print $2}'`
echo "*** IP address is $ipaddress ***"
SHELL
end
EOL
vagrant up
위의 스크립트를 실행하면 hostname -I | awk '{print $2}'
항상 Vagrantfile에 추가되지 않고 실행됩니다. 이 작업을 올바르게 수행하고 있는지 모르겠습니다. 더 좋은 방법을 제안해 주세요...
영어가 모국어가 아니므로 잘못된 문법은 잊어주세요. 감사합니다.
답변1
이 문서의 확장은 확장 자체가 참조되거나 문서 자체가 참조되지 않는 한 셸에 의해 실행됩니다.
예제의 문서에서 쉘이 확장하려고 시도하는 명령 대체 및 기타 다양한 변수를 인용합니다.
cat <<EOL > Vagrantfile
Vagrant.configure("2") do |config|
config.vm.define "vagrant-host"
config.vm.provision "shell", inline: <<-SHELL
sudo su
apt update
ipaddress=\\\$(hostname -I | awk '{print \\\$2}')
echo "*** IP address is \\\$ipaddress ***"
SHELL
end
EOL
$
명령 대체뿐만 아니라 코드 $2
및 awk
호출에서도 $ipaddress
인용 해야 합니다 echo
. 실제로 이 문자열 \\\
은 여기에 포함된 문서의 일부이기 때문에 실제로 큰따옴표를 사용해야 합니다 () SHELL
. 각각은 "작성 시 " \\\$
로 대체됩니다 .\$
Vagrantfile
당신이 정말로 그렇지 않다면생각하다쉘을 사용하여 이 문서의 특정 변수를 확장하면 일반적으로 이 문서 전체를 더 쉽게 참조할 수 있습니다. 이는 초기 문서 구분 기호 문자열을 참조하여 수행됩니다.
cat <<'EOL' > Vagrantfile
Vagrant.configure("2") do |config|
config.vm.define "vagrant-host"
config.vm.provision "shell", inline: <<-'SHELL'
sudo su
apt update
ipaddress=`hostname -I | awk '{print $2}'`
echo "*** IP address is $ipaddress ***"
SHELL
end
EOL
여기서는 여기에 포함된 문서와 외부 여기 문서를 참조하도록 선택합니다.
<<-
이 코드가 사용되는 방법과 위치에 따라 첫 번째 문서와 여기에 포함된 문서가 모두 탭으로 들여쓰기되어 있고 여기 문서가 모두 ( <<-'EOL'
및 <<-'START'
) 로 시작되는지 확인할 수 있습니다 . 이렇게 하면 여기에 포함된 문서가 올바르게 구문 분석될 수 있습니다(한 번 생성되면 끝이 SHELL
먼저 와야 함).Vagrantfile
이에 대해서는 제가 댓글을 달지 않았으니 참고해주세요콘텐츠여기에 있는 문서가 달성하려는 목표의 측면에서. 예를 들어 sudo su
말이 되는지 는 모르겠습니다 .
답변2
구분된 문서에서 백틱을 이스케이프하려면 백슬래시를 사용해야 합니다.
ipaddress=\`hostname -I | awk '{print $2}'\`