问题描述
#!/bin/bash
if[$LD_PATH == \"\"]
then
export LD_PATH=$1
else
export LD_PATH=$LD_PATH
fi
#excute the program that needs the path
./someProgThatNeedsThePath
我不断收到“无法打开共享对象文件”
解决方法
首先,由于缺少空格,您的bash语法已损坏。首先,您需要在
[
和]
闭包周围放置空格。如果使用较新的备用双括号语法,则不必担心引用要测试的变量。
#!/bin/bash
if [[ $LD_PATH = \"\" ]]; then
export LD_PATH=\"$1\"
else
export LD_PATH=\"$LD_PATH\"
fi
但是,您真正的问题根本不是。由于您的代码在单独的bash shell中运行,因此该代码不会对在父shell中运行的任何内容产生影响。为此,您需要构建一个函数:
function add_to_ld_path () {
if [[ -z $LD_PATH ]]; then
export LD_PATH=\"$1\"
fi
}
将该代码添加到您的.profile中,然后在需要使用add_to_ld_path /my/path
运行它时使用。请注意,由于您的\“ else \”语句实际上并未执行任何操作,因此我将其删除。我还用内置的空字符串测试用引号将您自己的测试替换为空白字符串。
接下来是您实际要完成的工作。如果您只想将变量设置为空,则UncleAli的解决方案非常简单。但是执行以下操作可能会很有用:
function add_to_ld_path () {
case \":$LD_PATH:\" in
*\"$1\"*) :;;
*) LD_PATH=$LD_PATH:$1
esac
}
这将检查当前路径并添加给定的路径(如果该路径尚不属于LD_PATH变量的话),否则将不予处理。
, if [ -z \"$LD_PATH\" ]
then
export LD_PATH=$1
fi
这样行吗?