【问题标题】:How to reference a file from any directory如何从任何目录引用文件
【发布时间】:2014-03-21 00:31:04
【问题描述】:

我有以下情况。

我有一个打包在 jar 文件中的 java 程序。如果我打电话给java -jar myProgramm.jar 一切正常。该文件正在从 build.xml(ant 文件)中读取一些值。此文件位于 myProgramm.jar 所在的同一目录中。 在我们公司,我们将所有内容都包装在 shell 脚本中,以便以一种不受限制的方式调用我们的脚本。

所以我的 shell 脚本 myProgrammWrapper.sh 看起来像这样:

    #!bin/bash
java -jar $(cygpath -w ~/path/to/tools/myProgramm.jar) "$@"

有 cygpath 命令是因为 sh 在 cygwin 中执行,否则找不到路径。 "$@" 将参数传递给程序。

以下是问题:

我们的 cygwin 环境已设置为可以从每个目录调用 myProgrammWrapper.sh。但是当然,当我从任何随机位置调用它时,找不到 build.xml。

有没有办法在 shell 脚本中引用 build.xml。它位于~/path/to/tools/

首先我在考虑将构建文件复制到当前目录,然后将其删除。这工作正常,但有一个基本缺陷。我们正在大量使用 ant 并拥有 build.xml 文件。因此,如果有人会在已经存在 build.xml 文件的目录中执行 myProgrammWrapper.sh。它将被覆盖。

也许这个问题可以从 Java 端解决。任何想法和意见表示赞赏。

【问题讨论】:

    标签: java shell path cygwin


    【解决方案1】:

    为什么不让 Bash 脚本将工作目录更改为包含 XML 文件的位置?

    试试:

    (cd $(cygpath -w ~/path/to/tools/) && java -jar $(cygpath -w ~/path/to/tools/myProgramm.jar) "$@")

    【讨论】:

    • 这是个好主意。还有一个额外的问题。该程序正在创建一些输出文件。并且预计会在调用 myProgramWrapper.sh 的目录中找到它们。有没有办法在 bash 脚本中添加该功能?
    • @elToro 谁希望输出文件位于您启动 myProgramWrapper.sh 的目录中?在 Bash 脚本中,您不能只将输出文件 mv 到调用脚本的位置吗?
    • 也是个好主意。我没有提到程序是这样调用的: myProgramWrapper.sh -p com.some.package 其中“com.some.package”对调用程序的人是免费的。所以我需要移动那个目录。我们需要在 bash 脚本中获取该参数并将其提供给 mv 命令。这可行吗?
    • @elToro 抱歉,很难理解你在最后一条评论中想说什么。
    • @elToro 在这种情况下,您可以使用mv -r 移动整个类文件夹结构。但这是解决这个问题的一个丑陋的方法:干净的方法是让你的 myProgramm.jar 程序输出到它被调用的任何目录。编辑您的 myProgramm 以采用 -x 开关,该开关将采用 XML 文件。然后在您的 Bash 脚本中运行 myProgram.jar -x /path/to/build.xml,而不更改当前工作目录。
    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2016-03-07
    相关资源
    最近更新 更多