Unix 是否有一种标准方法可以在变量为空时有条件地添加到ENV变量`
我正在创建一个脚本来配置和启动软件。我当前的应用程序需要附加到LD_LIBRARY_路径。我知道我可以先测试它是否为空,然后直接设置它并附加它 下面的代码似乎不起作用,即使它包含我在case语句中测试的字符串,它也会一直追加到变量 mysetup.shUnix 是否有一种标准方法可以在变量为空时有条件地添加到ENV变量`,unix,shell,environment-variables,portability,Unix,Shell,Environment Variables,Portability,我正在创建一个脚本来配置和启动软件。我当前的应用程序需要附加到LD_LIBRARY_路径。我知道我可以先测试它是否为空,然后直接设置它并附加它 下面的代码似乎不起作用,即使它包含我在case语句中测试的字符串,它也会一直追加到变量 mysetup.sh export AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0 if [ "$LD_LIBRARY_PATH" == "" ]; then echo empty setting exp
export AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0
if [ "$LD_LIBRARY_PATH" == "" ]; then
echo empty setting
export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib
else
case $LD_LIB_PATH in
*$AXIS2C_HOME/lib* )
echo already there skipping;;
* )
echo has entries but appending
export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib:${LD_LIBRARY_PATH};;
esac
fi
echo AXIS2C_HOME=${AXIS2C_HOME}
echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
运行示例
ojblass@helium:~/Source/axis2c-src-1.6.0$ pwd
/home/ojblass/Source/axis2c-src-1.6.0
ojblass@helium:~/Source/axis2c-src-1.6.0$ . ./mysetup.sh
empty setting
AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0
LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib
ojblass@helium:~/Source/axis2c-src-1.6.0$ . ./mysetup.sh
has entries but appending
AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0
LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib:/home/ojblass/Source/axis2c-src-1.6.0/lib
ojblass@helium:~/Source/axis2c-src-1.6.0$pwd
/home/ojblass/Source/axis2c-src-1.6.0
ojblass@helium:~/Source/axis2c-src-1.6.0$/mysetup.sh
空设置
AXIS2C_HOME=/HOME/ojblass/Source/AXIS2C-src-1.6.0
LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib
ojblass@helium:~/Source/axis2c-src-1.6.0$/mysetup.sh
有条目但没有附加
AXIS2C_HOME=/HOME/ojblass/Source/AXIS2C-src-1.6.0
LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib:/home/ojblass/Source/axis2c-src-1.6.0/lib
正如您所注意到的,LD_LIBRARY_路径不断添加到。另外,我有点害怕特定于shell,并且不像我希望的那样便于携带。任何建议都将不胜感激。如果上面的代码被复制并粘贴,那么答案就无关紧要了 拼写一致 (出现
LD_LIB_PATH
可能不是您想要的。)
当使用以下工具进行测试时:
sh -x mysetup.sh
(. ./mysetup.sh; sh -x mysetup.sh)
(unset LD_LIBRARY_PATH; sh -x mysetup.sh)
我看到第一个命令添加了$AXIS2C_HOME/lib
,第二个命令序列没有添加两次,第三个命令序列只是设置了它
另一种机制是使用中记录的脚本,如
clnpath
,或其中的一个其他答案。基本上,他们分析一个类似路径的变量,并确保它不包含重复项。DOH!在HP、AIX、NCR和Linux上工作一天是痛苦的。谢谢你,乔纳森!