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

前端之家收集整理的这篇文章主要介绍了bash脚本中刷新环境变量不成功的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

起因:在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执行,就没问题了。

猜你在找的程序笔记相关文章