要使用源代码永久更新〜/ .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
答案 0 :(得分:0)
首选:
提供脚本本身而不是运行脚本-然后,脚本中的命令在 current 外壳程序中运行,包括 source ~/.profile
。
替代方法(因为它将替换正在运行的shell,因此历史记录,变量值和其他状态将丢失。因此,使用此方法应该有一个非常的充分理由):
使用exec bash
或类似的名称代替source ~/.profile
-这将用另一个实例替换当前正在运行的Bash,该实例本身将加载新的.profile
。
答案 1 :(得分:0)
这是一种重构,可以将决定推迟给用户并清理脚本。
#!/bin/bash
# Put this in a variable so there is only one place to update
tarball='go1.12.5.linux-amd64.tar.gz'
sudo apt update
sudo apt -y upgrade
# cd || why would you?
curl -O "https://dl.google.com/go/$tarball"
tar xvf "$tarball"
sudo chown -R root:root ./go
sudo mv go /usr/local
rm "$tarball"
printf '%s\n' "export GOPATH=\$HOME/work" \
"export PATH=\$PATH:/usr/local/go/bin:\$GOPATH/bin" >> ~/.profile
echo "$0: done. source ~/.profile or exec bash to activate new settings." >&2