代码之家  ›  专栏  ›  技术社区  ›  ojblass

有没有一个标准方法可以在空的情况下有条件地添加到env变量中?`

  •  2
  • ojblass  · 技术社区  · 15 年前

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

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

    米塞普什

    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
    

    正如您注意到的,ld_库\路径不断被添加到。另外,我有点担心自己是特定于外壳的,不能像我想的那样方便携带。感谢您的任何建议。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Community CDub    7 年前

    如果上面的代码是复制粘贴的,那么答案是微不足道的。

    咒语 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 或者其他答案之一。基本上,他们分析类似路径的变量并确保它不包含重复项。