【问题标题】:(Mac) Calling a shell script from another shell script is giving an access error when running java(Mac) 从另一个 shell 脚本调用 shell 脚本在运行 java 时出现访问错误
【发布时间】:2019-12-01 22:24:33
【问题描述】:

我是一名前端开发人员,正在为客户处理一个项目。我们的后端团队为我提供了几个必须运行的 java 脚本,这些脚本为应用程序提供数据。所有这些脚本都是从命令行运行的。

我们被要求做的是打开几个终端实例(或几个选项卡也可以)并在每个终端窗口运行一个脚本(调用 java 应用程序)。

现在,这样做涉及手动打开所有窗口,使用“cd”命令进入正确的文件夹,然后手动运行 java 命令。我想自动化这个过程。

首先,我编写了一个 shell 脚本 (launch_language) 来调用正确文件夹中的 java 文件。 单独运行此命令就可以正常运行,并按预期运行程序

#!/bin/bash
java -jar mercury/language-packs/language-connector/target/language-connector-1.12.7.jar

到目前为止,一切都很好。

现在,我想编写另一个脚本,它将打开一个新的终端窗口,然后加载并运行这个工作脚本。好的,那么:

#!/bin/bash
open -a Terminal.app launch_language

运行此脚本会按预期打开一个新的终端窗口,并启动 launch_language 脚本。然而,当这种情况发生时,终端会给我这个错误:

Error: Unable to access jarfile mercury/language-packs/language-connector/target/language-connector-1.12.7.jar

关于为什么以这种方式调用 launch_language 脚本会导致此错误发生的任何想法?

【问题讨论】:

    标签: java bash shell terminal


    【解决方案1】:

    您在脚本中使用了相对路径 - 所以它只有在您从特定目录运行时才有效。

    可能的解决方案:

    1. java -jar 命令之前添加cd /FULL_PATH_TO_DIR
    2. 提供 jar 的完整路径 (/FULL_PATH_TO_DIR/mercury/language-packs/language-connector/target/language-connector-1.12.7.jar)

    【讨论】:

    • 选项 #2 非常适合我。我在 Finder 中找到了我的默认文件夹,然后右键单击面包屑以从根目录复制确切的路径。繁荣。工作。谢谢!