【发布时间】:2026-01-07 20:55:01
【问题描述】:
要使用源永久更新 ~/.profile,仅适用于手动输入。整个系统的重启也不会更新~/.profile,我需要手动更新。
是否有一种特殊的代码风格可以将其用作 bash/shell 脚本中的工作代码,或者这种特殊代码不打算在自动化脚本中使用?
需要它来自动安装 golang。
在下面的代码中,“source ~/.profile”行不起作用,并且没有任何错误消息,其余的工作正常:
#!/bin/bash
sudo apt update
sudo apt -y upgrade
cd ~
curl -O https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz
tar xvf go1.12.5.linux-amd64.tar.gz
sudo chown -R root:root ./go
sudo mv go /usr/local
cd ~
sudo rm go1.12.5.linux-amd64.tar.gz
sudo echo "export GOPATH=\$HOME/work" >> ~/.profile
sudo echo "export PATH=\$PATH:/usr/local/go/bin:\$GOPATH/bin" >> ~/.profile
source ~/.profile
【问题讨论】:
-
如果“手动输入”是指在交互式外壳中 输入,那么问题在于获取文件设置变量/别名/等。 在执行源代码的 shell 中,运行脚本的 shell 与用户的交互式解释器不同。如果相反,“不工作”意味着您收到类似
source: command not found的错误,这意味着您正在使用sh,而您应该使用bash。如果用“不工作”代替,您的意思是没有设置别名,那是因为别名在交互式解释器中默认是关闭的。 -
但是,我们需要猜测您的意思是许多可能的解释中的哪一个,这意味着这不是一个足够明确的问题,无法回答。
-
感谢您的回复。我将问题更新为整个脚本。最后一行的执行将不起作用,没有任何错误。似乎它有效,但是,命令“go version”甚至“go”都不会被识别。这个时候golang就不行了。我需要自己打开一个终端并在“source ~/.profile”中输入才能永久工作。
-
正确 --
source在你正在运行的 shell 中运行一些东西。在脚本中,它是运行脚本的 shell,不是用户启动脚本的 shell。因此,source ~/.bashrc在该上下文中将更改GOPATH脚本本身,但不会更改启动脚本的用户...因为您在脚本退出之前就这样做了,在脚本自己的环境中改变任何东西都不是很有用。 -
你为什么要
sudo echo一个字符串?通常echo不需要任何特殊权限。您也不需要sudo来删除您自己下载的文件,返回几个命令。
标签: linux bash shell ubuntu go