4

尝试通过双击在 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 后关闭终端。

谢谢!

4

1 回答 1

12

将以下内容添加到脚本的开头使其在双击时按预期工作。

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。

于 2012-08-13T23:38:57.337 回答