【问题标题】:Is there a standard method to add to ENV variables conditionally on being empty?`是否有标准方法可以有条件地添加到 ENV 变量中?
【发布时间】:2010-11-07 12:46:09
【问题描述】:

我正在创建一个脚本来配置和启动软件。我当前的应用程序需要附加到 LD_LIBRARY_PATH。我知道我可以先测试它是否为空,然后直接设置它,否则附加它。

以下内容似乎不起作用,即使它包含我在 case 语句中测试的字符串,它也会继续附加到变量中。

mysetup.sh

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}

Example_Run

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_PATH 不断被添加。另外,我有点担心特定于外壳并且不能像我想要的那样便携。任何建议表示赞赏。

【问题讨论】:

    标签: unix shell environment-variables portability


    【解决方案1】:

    如果上面的代码是复制粘贴的,那么答案很简单。

    拼写LD_LIBRARY_PATH一致

    (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 等How to keep from duplicating path variable in csh 中记录的脚本,或其中的其他答案之一。基本上,他们分析一个类似路径的变量并确保它不包含重复项。

    【讨论】:

    • 卫生署!一天之内在 HP、AIX、NCR 和 Linux 上工作是很痛苦的。谢谢乔纳森!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    相关资源
    最近更新 更多