尝试通过双击在Mac上运行以下test.command脚本。 (要求:必须以双击运行)
#!/bin/sh
sudo java -jar ExecutableJar.jar
这是输出。 (终端保持打开状态,显示以下信息)
Last login: Mon Aug 13 15:59:05 on ttys001
/Applications/Application\ Folder/test.command ; exit;
code-mac:~ code$ /Applications/Application\ Folder/test.command ; exit;
Unable to access jarfile ExecutableJar.jar
logout
[Process completed]
当我从终端运行相同的命令时......
sudo java -jar ExecutableJar.jar
...它工作正常并按预期打开可执行jar(提示输入密码后)。有任何想法吗?另外,如果可能的话,我希望脚本要么根本不打开终端,要么在启动可执行jar之后至少关闭终端。
谢谢!
答案 0 :(得分:11)
将以下内容添加到脚本的开头,使其在双击时按预期工作。
cd "$(dirname "$0")"
整个 test.command 脚本如下:
#!/bin/sh
cd "$(dirname "$0")"
sudo java -jar ExecutableJar.jar &
添加&在sudo命令的末尾使得可执行jar作为后台进程运行,并允许在我的情况下处理sudo之后的其他命令以关闭终端窗口。 (否则它会保持开放状态)
最后,在脚本结尾添加以下任一项将在完成后关闭它。第一种方法关闭了所有的终端窗口并且有点矫枉过正,但它完成了工作。
killall Terminal
第二个将提示用户关闭终端窗口,让用户可以选择。
osascript -e 'tell application "Terminal" to quit'
最后一个重要的注意事项是,关闭技术都不适用于我的案例。由于我的脚本需要sudo并提示用户输入密码,因此在用户有机会输入密码之前,使用任一路径都会提示用户关闭终端(osascript)或关闭终端(killall)。要先获取密码然后再运行可执行jar,请使用:
sudo -v
如果需要,提示输入密码,然后在后台运行可执行jar,&并使用killall或osascript。