Vagrant - 쉘 구성자는 PATH 변수를 설정할 수 없습니다

Vagrant - 쉘 구성자는 PATH 변수를 설정할 수 없습니다

go가 설치된 Ubuntu 18.04 VM을 설정하고 싶습니다. 다음과 같은 쉘 구성자 스크립트가 있습니다.

wget https://dl.google.com/go/go1.15.5.linux-amd64.tar.gz
sudo tar -xzvf go1.15.5.linux-amd64.tar.gz
sudo mv /home/vagrant/go /usr/local

echo "export GOROOT=/usr/local/go" >> /home/vagrant/.bashrc
echo "export PATH=$GOROOT/bin:$PATH" >> /home/vagrant/.bashrc
source /home/vagrant/.bashrc

go version

그러나 0이 아닌 종료 코드로 인해 구성이 여전히 실패합니다. 방랑자 사용자 계정에 로그인하면 설정이 되어 있지만 GOROOT포함 PATH되어 있지 않습니다 /usr/local/go.

vagrant@vm:~$ echo $PATH
/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

vagrant@vm:~$ echo $GOROOT
/usr/local/go

vagrant@vm:~$ go

Command 'go' not found, but can be installed with:

snap install go         # version 1.15.6, or
apt  install golang-go
apt  install gccgo-go

See 'snap info go' for additional versions.

go를 다운로드하는 것이 정확합니다. 그 아래에 모든 파일이 있습니다 /usr/local/go.

나한테 무슨 문제라도 있는 걸까?

답변1

문제는 변수 보간을 허용하는 큰따옴표 사용으로 인해 발생합니다. 쉘 스크립트가 다음 줄을 실행할 때:

echo "export PATH=$GOROOT/bin:$PATH" >> /home/vagrant/.bashrc

고루트의 가치실행 쉘 환경에서비어 있으므로 이 명령의 효과는 다음과 같습니다.

echo "export PATH=/bin:$PATH" >> /home/vagrant/.bashrc

...그리고 이것이 바로 여러분이 보는 것입니다:

방랑자@vm:~$ 에코 $PATH

/쓰레기통:...

^ here.

이 코드를 파일에 그대로 넣으려면 작은따옴표를 사용하십시오.

echo 'export GOROOT=/usr/local/go' >> /home/vagrant/.bashrc
echo 'export PATH=$GOROOT/bin:$PATH' >> /home/vagrant/.bashrc

관련 정보