登录
首页 >  Golang >  Go问答

在 bash 脚本中无法使用“source ~/.profile”

来源:stackoverflow

时间:2024-03-16 21:42:27 347浏览 收藏

在 Bash 脚本中使用“source ~/.profile”可能会遇到问题,因为其无法永久更新 ~/.profile 的源代码,并且系统重启也不会自动更新它。解决方法是将脚本本身获取,而不是运行它,或者使用“exec bash”替代“source ~/.profile”。后者会用一个加载新 .profile 的 Bash 实例替换当前运行的实例,从而解决无法更新 ~/.profile 的问题。

问题内容

要永久更新 ~/.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 中运行,包括 source ~/.profile

替代方案(因为这会替换正在运行的 shell,历史记录、变量值和其他状态都会丢失。因此应该有一个非常使用此方法的充分理由):

使用 exec bash 或类似的东西代替 source ~/.profile - 这会将当前运行的 Bash 替换为另一个实例,该实例本身会加载新的 .profile

今天关于《在 bash 脚本中无法使用“source ~/.profile”》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>