2014-03-13 137 views
2

我看過Can a Bash script tell what directory it's stored in?,它表明我可以通過DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"得到腳本目錄。Bash腳本改變工作目錄到它所在的目錄

我發現我可以使用cd命令來更改工作目錄。

這是import.sh的內容。它在/Users/gqqnbig/SourceCode/Java/PlayerStatisticReader/bin

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

cd DIR 

java -cp .;jsoup-1.7.3.jar;mysql-connector-java-5.1.29-bin.jar globalVisionEntertainment.nba.Program %1 

這是執行腳本後得到的結果。

Macintosh:PlayerStatisticReader gqqnbig$ pwd 
/Users/gqqnbig/SourceCode/Java/PlayerStatisticReader 
Macintosh:PlayerStatisticReader gqqnbig$ bin/import.sh 
: command not found 2: 
: No such file or directoryDIR 
: command not found 4: 

我在Macintosh的默認終端中執行它。

爲什麼找不到該命令?我怎樣才能使它工作?

+1

基於錯誤消息,它看起來像'import.sh'使用DOS行尾。請務必保存該文件以代替使用UNIX/OS X行尾。 – chepner

+0

你是對的。應用了傻瓜怪胎的方法後,我的腳本就起作用了。此外,我必須改變;到:在類路徑選項中。 – Gqqnbig

+0

可能重複的[:命令不foundop/dominio.sh:第2行:](http://stackoverflow.com/questions/21889410/command-not-foundop-dominio-sh-line-2) – tripleee

回答

2

你需要寫

cd "$DIR" 

嚴格,你只需要添加的美元,但你也應該引用路徑,因爲它可能含有空間。至於命令找不到消息;我不知道。您可以刪除空行。我的猜測是這是一個編碼問題。如果將腳本直接粘貼到終端而不是運行文件,是否會得到「command not found」輸出?

+0

我刪除空行,並改爲'cd「$ DIR」',我得到':沒有這樣的文件或目錄/ Users/gqqnbig/SourceCode/Java/PlayerStatisticReader/bin'。 – Gqqnbig

2

使用以下方法來擴大可變

cd ${DIR}