将Mac Dock图标上的drop drop事件传递给shell脚本及其子进程

时间:2014-03-21 11:47:03

标签: java macos bash shell java-native-interface

假设我有一个Mac应用程序包,我的可执行文件不是基于Cocoa / Objective-C的,但我使用普通的shell脚本有任何好的理由:

  • myProgram.app/
    • 内容/
      • 的MacOS /
        • mainExecutable.sh
      • 资源/

在使用主程序(基于GUI)启动java进程之前,shell脚本会执行一些foo。

我现在想在我的java进程中接收到Drop Dock图标的drop事件,但这似乎不起作用。

shell脚本在启动时($0$@)既不接收已删除的文件作为参数列表,也不接收stdin上的任何输入。

如何将drop事件和已删除文件列表传递给shell脚本和内部执行的任何程序?

1 个答案:

答案 0 :(得分:0)

经过长时间的研究后,我在apple mailing list上找到答案:

  

在调用java命令之前,我需要添加到sh脚本的所有内容:

     

export CFProcessPath="$0"

这真的很有魅力!

这是我的最终代码:

...
export CFProcessPath="$0"
exec java -jar ...

由于苹果邮件列表上的另一个问题,这不仅适用于处理shell脚本中的drop事件,还适用于通过JNI支持OSX系统服务。