是否有一个标准方法可以在 ENV 变量为空时有条件地添加到该变量中?
-
21-08-2019 - |
题
我正在创建一个脚本来配置和启动软件。我当前的应用程序需要附加到 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}
示例_运行
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_LIBRARY_PATH 不断被添加。另外,我有点担心特定于 shell 并且不能像我想要的那样便携。任何建议表示赞赏。
解决方案
如果复制并粘贴上面的代码,那么答案就很简单了。
拼写 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
记录在 如何避免在 csh 中重复路径变量, ,或那里的其他答案之一。基本上,他们分析类似路径的变量并确保它不包含重复项。
不隶属于 StackOverflow