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

ただし、ゼロ以外の終了コードのため、設定はまだ失敗します。放浪者ユーザーアカウントにログインすると設定されていますが、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

関連情報