环境变量通常保存了可用于搜索可执行文件、库文件等的路径列表。例如$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
PATH
和LD_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
的值。
通过这次修改,在向环境变量中添加新路径时,当且仅当旧值存在,才会增加:
。