【问题标题】:How to execute .sh file which is in jar file如何执行 jar 文件中的 .sh 文件
【发布时间】:2020-01-24 06:59:58
【问题描述】:

我在某个位置有 jar 文件。(/test/lib/myproject.jar)。

在那个 jar 文件中,我有 .sh 文件 (/org/com/api/demo.sh)。

现在我想执行那个demo.sh 文件。 如何在 Linux/Unix 中执行该文件?

【问题讨论】:

  • 从 jar 中提取 sh 文件或使用 stackoverflow.com/questions/525212/…
  • 如果您不知道:您可以使用unzip 从 .jar 文件中提取数据。
  • 如果您在该 jar 中从 Java 执行该脚本,则必须通过 Class.getResourceAsStream() 提取并保存或直接通过管道传输到正在运行的 shell 进程

标签: linux shell unix jar


【解决方案1】:

您可以使用unzip 提取文件,并将其通过管道传送到sh 以运行它。

unzip -p /test/lib/myproject.jar org/com/api/demo.sh |
sh

请注意 zip 文件通常不能包含绝对路径。 unzip 的第一个参数是存档,其余参数命名要提取的存档成员; -p 选项表示提取到标准输出。

作为一种特殊情况,如果您需要在当前 shell 的上下文中执行代码(即有效地 source 它),这是在 $(...) 中包装命令的罕见情况之一。 (很多初学者喜欢尝试把它放在各种奇怪的地方。)

$(unzip -p /test/lib/myproject.jar org/com/api/demo.sh)

您应该更喜欢第一个选项,除非您特别知道您需要第二个选项并了解其中的区别。此外,像往常一样,您应该只执行您信任的代码,并且最好是经过审查。

如果您需要多次运行代码,请将其保存到文件中并将其标记为可执行文件。

unzip -p /test/lib/myproject.jar org/com/api/demo.sh >demo
chmod +x ./demo

然后运行它

./demo

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2014-12-31
    • 2014-12-17
    • 2012-11-24
    • 2015-07-03
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多