搜索热词
起因:在bash里进行安装jdk,MysqL等,发现刷新环境变量总是不起作用,必须结束后,自己手动source ~/.bashrc才管用,经过研究发现:
bash启动的时候用了一个子进程,所以刷环境变量也是刷新的子进程的环境变量
bash脚本即使刷新的/etc/profile,也一样不起作用,原因见上
子进程中想用父进程中的变量,父进程中该变量必须export,如export JAVA_HOME=/usr/java/jdk1.8.0_65
脚本中定义变量的等号两边不允许有空格,如java_dir="/usr/java/"可以, java_dir = "/usr/java/"不可以
tar解压的命令中-C 后面跟变量,变量加不加引号都一样,如tar zvxf jdk-8u65-linux-x64.tar.gz -C $java_dir同tar zvxf jdk-8u65-linux-x64.tar.gz -C "$java_dir"
解决办法:
记住执行脚本的方式的区别
./example.sh = /path/example.sh
sh example.sh = bash example.sh
. example.sh
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.sh或source t1.sh执行,就没问题了。
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。