#!/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
Run Code Online (Sandbox Code Playgroud)
我一直在"无法打开共享对象文件"
首先,由于缺少空格,您的bash语法被破坏了.首先,你需要围绕[和]闭合的空间.如果使用较新的备用双括号语法,则无需担心引用正在测试的变量.
#!/bin/bash
if [[ $LD_PATH = "" ]]; then
export LD_PATH="$1"
else
export LD_PATH="$LD_PATH"
fi
Run Code Online (Sandbox Code Playgroud)
但你真正的问题根本不是那个.由于您的代码在单独的bash shell中运行,因此代码对您在父shell中运行的任何内容都没有影响.为此,您需要构建一个函数:
function add_to_ld_path () {
if [[ -z $LD_PATH ]]; then
export LD_PATH="$1"
fi
}
Run Code Online (Sandbox Code Playgroud)
将该代码添加到.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
}
Run Code Online (Sandbox Code Playgroud)
如果它不是LD_PATH变量的一部分,这将检查当前路径并添加给定的路径,否则它将不管它.