File.getAbsoluteFile() return "/" in unix shell 执行

File.getAbsoluteFile() return "/" in unix shell execution

我正在使用 File.getAbsoluteFile() 来构建资源文件夹的相对路径。 当我在 IDE 中执行代码时 - 效果很好。 我已经编译了一个 jar 文件,并在终端中通过脚本执行它 - 效果很好。

在这两种情况下,我都获得了正确的相对路径: "/Users/ie54553/Desktop/MyProject/"

我尝试使用 OSX launchd
执行相同的脚本 plist 看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>net.nathangrigg.archive-tweets</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/ie54553/Desktop/MyProject/script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>

    <key>StandardOutPath</key>
    <string>/tmp/out.out</string>
    <key>StandardErrorPath</key>
    <string>/tmp/err.out</string>
</dict>
</plist>

脚本正在执行,但我得到的相对路径是:“/”而不是“/Users/ie54553/Desktop/MyProject/”,因为它应该是...

知道为什么会这样吗?

最后我用了下一种方式

new File(ClassName.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());

我得到了执行 jar 的路径,然后对字符串进行了一些操作,然后它起作用了...

没有最 "elegant" 的方法,但有效:)