如何检查是否设置了PATH?如果没有,请从参数中设置它

时间:2011-06-21 20:17:23

标签: bash

#!/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

我一直在“无法打开共享对象文件”

2 个答案:

答案 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

这会完成这项工作吗?