【问题标题】:Double-click shell script issues (.COMMAND on Mac)双击 shell 脚本问题(Mac 上的 .COMMAND)
【发布时间】:2012-08-10 03:47:19
【问题描述】:

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

谢谢!

【问题讨论】:

  • 也许您需要指定ExecutableJar.jar 的完整路径。它可能不在运行双击脚本的默认目录中(可能是您的主目录)。手动运行它,你可能事先做了一个cd 什么的……
  • 因为它是一个安装到用户选择位置的程序,所以该位置不能被硬编码。该脚本与可执行 jar 位于同一目录中,我将如何更改脚本以切换到当前目录?也许是“cd .”?
  • 在这种情况下,您可能需要一个安装程序脚本来自定义test.command 脚本以适应用户选择的安装位置。
  • 安装程序和我必须满足的要求是不可能的。我很犹豫是否相信脚本无法确定它自己的位置并设置 jar 可执行文件本身的位置......
  • 您的系统上是否有dirname?我对 Mac/OSX 环境不是很熟悉。在这种情况下,d=$(dirname $0) 在您的test.command 顶部并将java 调用更改为java -jar ${d}/ExecutableJar.jar 应该可以工作。如果您没有dirname,将无法工作,但...

标签: macos shell terminal


【解决方案1】:

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

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。

【讨论】:

    猜你喜欢
    • 2017-12-11
    • 2016-09-27
    • 1970-01-01
    • 2013-11-25
    • 2011-05-01
    • 2022-12-03
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多