2012-07-24 91 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 

但我不能肯定這是唯一的問題,因爲當我執行此腳本,我沒有得到從目錄名的錯誤,腳本打印「/」。