linux - 如何执行 jar 文件中的 .sh 文件
问题描述
我在某个位置有 jar 文件。(/test/lib/myproject.jar
)。
在那个 jar 文件中,我有 .sh 文件 ( /org/com/api/demo.sh
)。
现在我想执行那个demo.sh
文件。如何在 Linux/Unix 中执行该文件?
解决方案
您可以使用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
推荐阅读
- angular - Angular 表单一次显示一条错误消息
- knockout.js - Dynamic Add New Row Using knockout js
- node.js - 在 NestJS 中为 Pug 设置“basedir”选项
- docker - 如何在 dockerfile 中使用 .ENV 文件中的变量?
- c - printf("%d","%u","%p",ptr,ptr,ptr) 和 printf("%d %u %p",ptr,ptr,ptr) 有什么区别?
- http - 如何查看单击 HTML 按钮时发出的 POST 请求的地址?
- postgresql - 几何类型从数据库中读取为字符串
- swift - 为信用卡输入格式化 NSTextField,例如 (xxxx xxxx xxxx xxxx) [macOS Swift]
- sqlite - 在 SQLite 中使用过滤器和分页查询多对多关系
- php - 致命错误:未捕获的 PDOException:使用 Google Cloud SQL 实例连接