2012-07-24 92 views
0

我有一个名为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 

我想这个脚本设置变量SRC_DIR在我当前的shell环境。因此,当我做源abc.sh,我得到一个错误,说无效的选项dirname。 但是,如果我运行./abc.sh这个文件,我没有得到任何错误,但后来它不会导出变量

回答

0

如果你这样做source,然后$0不会改变(不会的名字您的可执行文件,例如:./abc.sh)。

+0

我需要做源代码,所以对于源代码,有没有办法获得值./abc.sh? – Jimm 2012-07-24 14:46:07

+1

'source ./abc.sh。/ abc.sh'? :)使用'功能'?不知道你想做什么,你的剧本看起来真的很糟糕... – 2012-07-24 15:37:28

2

问题的一部分是,当您输入脚本时$ 0的值不同,因为sourcing与将命令直接输入到shell相同。所以当你运行脚本时,$ 0是abc.sh,但是当你输入它时,$ 0是/ bin/bash。您可以通过设置-x标志看到这一点:

set -x 
source abc.sh 

但我不能肯定这是唯一的问题,因为当我执行此脚本,我没有得到从目录名的错误,脚本打印“/”。