dirname的选项无效

时间:2012-07-24 14:33:48

标签: linux bash

我有一个名为abc.sh的简单脚本,如下所示,用于设置环境变量

#!/bin/bash
sourcePath () {
filename=`basename $0`

current_dir="./"$filename
if [ "$current_dir" = "$0" ]; then        SRC_DIR=$(pwd) 
         SRC_DIR=$(cd "$SRC_DIR/.."; pwd)
else        SRC_DIR=$(cd "$(dirname "$0")/.."; pwd)
fi
}

sourcePath
echo $SRC_DIR
export SRC_DIR

我希望这个脚本在我当前的shell环境中设置变量SRC_DIR。因此,当我做源abc.sh时,我收到一个错误,指出dirname的无效选项。 但是,如果我使用./abc.sh运行此文件,我不会得到任何错误,但它不会导出变量

2 个答案:

答案 0 :(得分:2)

部分问题是,当您获取脚本时,$ 0具有不同的值,因为源代码与直接向shell键入命令相同。因此,当您运行脚本时,$ 0是abc.sh,但是当您获取它时,$ 0是/ bin / bash。您可以通过设置-x标志来看到这一点:

set -x
source abc.sh

但是我无法确定这是唯一的问题,因为当我从源代码中获取时,我没有从dirname收到错误,并且脚本会打印“/".

答案 1 :(得分:0)

如果您执行source,则$0将不会更改(不会是您的可执行文件的名称,例如:./abc.sh)。