Double Clicking a shell script on Mac
我有一个运行JAR文件的小脚本:
1 2 3 4 5 6 | #!/bin/bash prefix="foo"; name=`ls ${prefix}*.jar`; echo $name; java -jar $name prop1.properties prop2.properties |
当我使用./myscript.sh在终端中运行它时,它工作正常,JAR文件执行,但是当我在myscript.command中重命名它并双击它时,出现了以下错误:
1 | ls: foo*.jar : No such file or directory |
我看到一个明显的.command文件在根目录下打开了一个终端,所以我尝试使用该文件查找包含myscript.command的目录:
1 2 | dir = 'find <dir> -maxdepth 1 -type d -name '*myDirContainingJar*' -print -quit' cd $dir |
但是dir只是空白,有什么想法吗????
在MacOS上从finder打开shell脚本(无论它是扩展名
要显式更改脚本本身所在的目录,请使用:
1 | cd --"$(dirname --"$BASH_SOURCE")" |
在这个调用场景中,使用
注:
通常,如果您的脚本是通过symlink调用的,并且您希望更改到目标的目录(实际脚本文件的目录,而不是symlink所在的目录),则需要进行更多的工作-请参见我的回答。
然而,当从finder打开脚本时,这个问题不适用,因为finder本身解决了一个到其(最终)目标的符号链接,然后直接调用目标。
您的脚本的问题在于,它运行的工作目录与您测试的工作目录不同。在脚本中执行