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