#!/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
我一直在“无法打开共享对象文件”
答案 0 :(得分:8)
首先,由于缺少空格,您的bash语法被破坏了。首先,您需要[
和]
闭包周围的空格。如果您使用newer alternate double bracket syntax,则无需担心引用正在测试的变量。
#!/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's solution非常简单。但做这样的事情可能会有用:
function add_to_ld_path () {
case ":$LD_PATH:" in
*"$1"*) :;;
*) LD_PATH=$LD_PATH:$1
esac
}
这将检查当前路径并添加给定的路径,如果它不是LD_PATH变量的一部分,否则它将不管它。
答案 1 :(得分:2)
if [ -z "$LD_PATH" ]
then
export LD_PATH=$1
fi
这会完成这项工作吗?