Linux下设置环境变量 |软件安装脚本里面添加自动配置环境变量

什么是环境变量PATH及作用

我们前天在安装JDK的时候,已经说了安装过程中最重要的一步就是设置环境变量。当然若是不配置的话就会出现下面的问题:(就是在非JDK安装的目录下运行 java和javac 命令)
在这里插入图片描述
OK,那我们就首先介绍一下 什么是这个环境变量 PATH以及它有什么作用?

1、通常情况下,我们要运行一个软件或者一些工具的时候:若是我们指定一个目录或者说就在这个目录下面操作,那么相关的程序久将会在该目录里面寻找相关文件。否则就会像上面的javac一样找不到命令。
2、而设置变量PATH 对于我们最实用的作用就是:不用拷贝某些dll或lib等库文件到系统目录中了,而PATH这一系统变量就是存储了系统搜索库文件的一系列路径。同时若是设置了可执行程序的路径,那么我们也就不必在可执行程序的目录下面执行它。

上面的实例是在Windows上设置环境变量的,我们今天则主要看一下在Linux 操作系统上面如何设置我们安装程序的环境变量(设置可执行程序的路径到PATH之后,我们就不用必须在其目录下面去执行它

注:我们这里使用的Linux实用版本为Centos 7,不同的版本可能配置环境变量的方式会有所区别!

Linux下读取当前的环境变量

在这里插入图片描述
如上图所示:环境变量PATH是一系列具体路径的集合,彼此之间使用 :分割

Linux下如何来配置环境变量

注:我们给我们所要安装的这个软件的环境变量(路径)名字统一为My_HOME 配置里面的bin目录,假设软件安装位置是:/home/song/songbaobao/dbsql/bin
在这里插入图片描述
OK,通常情况下在Linux上配置环境变量(把My_HOME添加到PATH上)有五种方式:

方式一:在控制台bash中设置 export PATH

其使用方式如下:

export PATH=/home/uxdb/songbaobao/dbsql/bin:$PATH
--------------或者把PATH放在前面------------------
export PATH=$PATH:/home/uxdb/songbaobao/dbsql/bin
在这里插入图片描述
在这里插入图片描述
注:位置的前后也就决定了在变量PATH里面的前后顺序!

其注意事项如下:

1、立刻生效
2、仅当前终端有效,bash关闭后失效;仅对当前用户有效,别的用户用不了
3、配置的环境变量中不要忘了加上原来的配置,即:$PATH。否则则直接覆盖原来的PATH值
4、适用于一些临时起作用的环境变量设置

方式二:在当前用户家目录下的.bashrc中设置 vim ~/.bashrc

注:这种方式是我推荐大家使用的方式,也是等下我们最后在安装脚本里面添加自动配置环境的方式。原来文件的内容如下:
在这里插入图片描述
OK,开始我们的配置!

其使用方式如下:

# 在export PATH的上面一行加上如下内容:
export My_HOME=/home/uxdb/songbaobao/dbsql
PATH=$My_HOME/bin:$PATH
在这里插入图片描述
1、关闭这个bash,使用相同的用户打开新的终端时生效
2、或者手动source ~/.bashrc立刻生效

其注意事项如下:

1、永久有效
2、仅对当前用户有效,使用比较安全
3、如果有后续的环境变量加载文件覆盖了PATH定义,则可能会失效

方式三:在当前用户家目录下的.bash_profile中设置 vim ~/.bash_profile

其实这种方式和上面的差不多,我们首先先看一下这个.bash_profile文件:

[uxdb@local64 ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

GRADLE=/usr/local/gradle/gradle-4.6/bin
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$GRADLE

export PATH

[uxdb@local64 ~]$ 

解释一下:若是.bashrc文件存在,则相当于使用source命令 就是使这个.bashrc文件里面环境变量生效(和我们上面的做的事情一样,只是这里使用了点命令)。除此之外,它里面也是可以定义环境变量的。

其使用方式如下:

# 在export PATH的上面一行加上如下内容:
export My_HOME=/home/uxdb/songbaobao/dbsql
PATH=$My_HOME/bin:$PATH
在这里插入图片描述
1、关闭这个bash,使用相同的用户打开新的终端时生效。(有时候不一定生效,重启之后即可)
2、或者手动source ~/.bashrc可能立刻生效
3、不建议这种,有时候不会立刻生效或者立刻失效 需要重启

其注意事项如下:

1、永久有效
2、仅对当前用户有效,使用同上一种方式
3、如果有后续的环境变量加载文件覆盖了PATH定义,则可能会失效


OK,下面我们就来看一下针对于全部用户生效的方式(配置中需要管理员权限),建议:我们在学习过程中可以这么做,但是真的用在工作或者一些严格的场景下 建议采用上面方式。当然如果有特殊的需求,那我们就采用下面的这些方式也是可以的。


方式四:在/etc/目录下的bashrc中设置 sudo vim /etc/bashrc

其使用方式如下:

# 在export PATH的上面一行加上如下内容:
export My_HOME=/home/uxdb/songbaobao/dbsql
PATH=$My_HOME/bin:$PATH
在这里插入图片描述
1、关闭这个bash,使用相同的用户打开新的终端时生效
2、或者手动source ~/.bashrc立刻生效

其注意事项如下:

1、永久有效
2、对所有用户有效,使用不太安全

方式五:在/etc/目录下的profile中设置 sudo vim /etc/profile

我们在改动这个文件之前先看一下,文件的注释说明内容:

[uxdb@local64 ~]$ head -10 /etc/profile
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

[uxdb@local64 ~]$ 

上面已经说的很清楚,大家若是不指定自己在干啥的时候最好不要改动这个文件。

其使用方式如下:

# 在其中一处 export PATH的上面一行加上如下内容:
export My_HOME=/home/uxdb/songbaobao/dbsql
PATH=$My_HOME/bin:$PATH
在这里插入图片描述
1、关闭这个bash,使用相同的用户打开新的终端时生效。(有时候不一定生效,重启之后即可)
2、或者手动source ~/.bashrc可能立刻生效
3、不建议这种,有时候不会立刻生效或者立刻失效 需要重启

其注意事项如下:

1、永久有效
2、对所有用户有效,使用不太安全

注:也许是因为环境的问题,我的centos7 有些时候source之后,不一定立刻生效(需要重启)。相比之下,第二种方式算是最优的方案,下面我们就使用第二种方案来完成 软件安装脚本里面添加自动配置环境变量

安装脚本里面自动配置环境变量

场景:我们得到一个软件的安装包,里面有一个install.sh的安装脚本。我们可以使用它来完成该软件的安装,例如我们这里的软件 它拥有一个充满可执行程序的bin目录。在通常情况下,我们可以等安装完成之后,将其路径用上面你喜欢的方式来完成环境变量PATH的配置。

而现在,我们主要是利用Shell脚本的命令,以及上面第二种配置方式来完成软件安装的自动化配置!
来看一下我写的这个函数:

function Auto_configure_environ_varia()
{
	if [ -f "/home/$User/.bashrc" ] ; then #选择第二种方式,预先判断文件存在

		PATH_OF_SOFTWARE=$InstallDir/dbsql
		hasPATH=$(grep -v "^#" /home/$User/.bashrc | grep "\export PATH" | wc -l)
		if [ $hasPATH -eq 0 ] ; then
			sed -i '$a \export My_HOME='"${PATH_OF_SOFTWARE}"'' /home/$User/.bashrc
			sed -i '$a PATH='"\$My_HOME\/bin"':$PATH' /home/$User/.bashrc
			sed -i '$a \export PATH' /home/$User/.bashrc
		else
			hasUXDBHOME=`grep -v "^#" /home/$User/.bashrc | grep "\export My_HOME" | wc -l`
			if [ $hasUXDBHOME -eq 0 ] ; then
				theFirst=$(grep -n "^export PATH" /home/$User/.bashrc | awk  -F ':'  '{print $1}' | sed -n '1p;1q')
				sed -i ''"${theFirst}"'i \export My_HOME='"${PATH_OF_SOFTWARE}"'' /home/$User/.bashrc
				let theFirst++
				sed -i ''"${theFirst}"'i \PATH='"\$My_HOME\/bin"':$PATH' /home/$User/.bashrc
			else
				sed -i -r "s#export My_HOME.*#export My_HOME="${PATH_OF_SOFTWARE}"#g" /home/$User/.bashrc
				hasConfigured=$(grep -v "^#" /home/$User/.bashrc | grep "^PATH" | grep "\$My_HOME\/bin" | wc -l)
				if [ $hasConfigured -eq 0 ] ; then
					sed -i '/export PATH/i\PATH='"\$My_HOME\/bin"':$PATH' /home/$User/.bashrc
				fi
			fi
		fi
		source /home/$User/.bashrc
		echo "done" 
	fi
}

解释一下上面这个函数:

$User:是指当前安装的用户,我们就是为其设计的环境变量
$InstallDir:是指你这个软件选择安装的位置

我这个函数的逻辑处理为:

1、有没有.bashrc文件,有则设置
2、该文件里面有没有有效的 export PATH,若无则添加My_HOME定义;添加PATH新定义;补上export PATH
3、若有则先判断有无My_HOME的有效的 定义(因为之前也许安装配置过)。若无则在第一次export PATH之前,添加My_HOME定义;添加PATH新定义
4、若有这个My_HOME的有效的 定义,则直接进行替换。目的:也许安装位置变了,之前的环境变量失效了。
5、无论是否相同,则都进行替换为新的位置。接下来判断PATH里面有无My_HOME的添加,若无则添加上。
6、让这个文件生效,之后新打开的bash就都是自动配置这个最新的环境变量了。

OK,这些都是我利用Shell脚本的文件操作三剑客完成的,已经完成了测试(没有问题) 特此拿出来供大家借鉴和指正!

最后还是口号奉上:苟利国家生死以,岂因祸福趋避之。漫漫清华路,且行且珍惜。
2020年5月23日16:50:51

猜你喜欢

转载自blog.csdn.net/weixin_43949535/article/details/106299641