加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

bash脚本中刷新环境变量不成功的问题

发布时间:2020-12-15 01:20:00 所属栏目:C语言 来源:网络整理
导读:起因:在bash里进行安装jdk,mysql等,发现刷新环境变量总是不起作用,必须结束后,自己手动 source ~/.bashrc 才管用,经过研究发现: bash启动的时候用了一个子进程,所以刷环境变量也是刷新的子进程的环境变量 bash脚本即使刷新的 /etc/profile ,也一样

起因:在bash里进行安装jdk,mysql等,发现刷新环境变量总是不起作用,必须结束后,自己手动source ~/.bashrc才管用,经过研究发现:

  1. bash启动的时候用了一个子进程,所以刷环境变量也是刷新的子进程的环境变量

  2. bash脚本即使刷新的/etc/profile,也一样不起作用,原因见上

  3. 子进程中想用父进程中的变量,父进程中该变量必须export,如export JAVA_HOME=/usr/java/jdk1.8.0_65

  4. 脚本中定义变量的等号两边不允许有空格,如java_dir="/usr/java/"可以, java_dir = "/usr/java/"不可以

  5. tar解压的命令中-C 后面跟变量,变量加不加引号都一样,如tar zvxf jdk-8u65-linux-x64.tar.gz -C $java_dirtar zvxf jdk-8u65-linux-x64.tar.gz -C "$java_dir"

解决办法:
记住执行脚本的方式的区别

  1. ./example.sh = /path/example.sh

  2. sh example.sh = bash example.sh

  3. . example.sh

  4. source example.sh

1,2 会打开一个BASH的子进程来进行执行。
3,4 会在当前BASH环境中执行。

source install_jdk.sh. install_jdk.sh的方式执行即可。


从oracle官网上下载linux jdk,然后在同一目录下建立脚本install_jdk.sh

install_jdk.sh

#!/bin/bash
# jdk安装脚本

echo "Starting install jdk..."

建立文件夹并解压

java_dir="/usr/java/"
if [ ! -d "$java_dir" ]; then
mkdir -p "$java_dir"
fi
tar zvxf jdk-8u65-linux-x64.tar.gz -C $java_dir

设置环境变量

cat >> ~/.bashrc << "EOF"

JAVA ENV

export JAVA_HOME=/usr/java/jdk1.8.0_65
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EOF
source ~/.bashrc
java -version

echo "jdk is installed."
exit 0


一些测试脚本

t1.sh

#!/bin/bash
cat >> ~/.bashrc << "EOF"
export MYPARA3="tasdfasdfhis is a test"
EOF
source ~/.bashrc

echo $MYPARA3

./t1.sh执行后就会显示MYPARA3的内容,但是再敲一遍echo $MYPARA3没反应,必须要先source ~/.bashrc,然后再echo $MYPARA3才行。
. t1.shsource t1.sh执行,就没问题了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读