2014-03-13 166 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}