Shell 使用函数添加环境变量

环境变量通常保存了可用于搜索可执行文件、库文件等的路径列表。例如$PATH$LD_LIBRARY_PATH,它们通常看起来像这样:

PATH=/usr/bin; /bin
LD_LIBRARY_PATH=/usr/lib; /lib

这意味着只要shell执行应用程序(二进制文件或脚本)时,它就会首先查找/usr/bin,然后查找/bin。
当你使用源代码构建并安装程序时,通常需要为新的可执行文件和库文件添加特定的路径。假设我们要将myapp安装到/opt/myapp,它的二进制文件在/opt/myapp/bin目录中,库文件在/opt/ myapp /lib目录中。

Shell 使用函数添加环境变量 实战演练

这个例子展示了如何将新的路径添加到环境变量的起始部分。第一个例子利用我们目前所讲过的知识来实现,第二个例子创建了一个函数来简化修改操作。本章随后会讲到函数。

export PATH=/opt/myapp/bin:PATH
export LD_LIBRARY_PATH=/opt/myapp/lib;LD_LIBRARY_PATH

PATHLD_LIBRARY_PATH现在看起来应该像这样:

PATH=/opt/myapp/bin:/usr/bin:/bin
LD_LIBRARY_PATH=/opt/myapp/lib:/usr/lib; /lib

我们可以在.bashrc文件中定义如下函数,简化路径添加操作:

prepend() { export 1 && [ -d "2" ] && eval 1=\"2':'\$$1\"; }

该函数用法如下:

prepend PATH /opt/myapp/bin
prepend LD_LIBRARY_PATH /opt/myapp/lib

Shell 使用函数添加环境变量 工作原理

函数prepend()首先确认该函数第二个参数所指定的目录是否存在。如果存在,eval表达式将第一个参数所指定的变量值设置成第二个参数的值加上:(路径分隔符),随后再跟上第一个参数的原始值。
在进行添加时,如果变量为空,则会在末尾留下一个:。要解决这个问题,可以对该函数再做一些修改:

prepend() { export 1 && [ -d "2" ] && eval 1=\"2\\{1:+':'\$$1\}\"; }

在这个函数中,我们引入了一种shell参数扩展的形式:

${parameter:+expression}

如果parameter有值且不为空,则使用expression的值。
通过这次修改,在向环境变量中添加新路径时,当且仅当旧值存在,才会增加:

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程