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