【问题标题】:Execute a .jar file using shell script使用 shell 脚本执行 .jar 文件
【发布时间】:2024-01-22 06:51:02
【问题描述】:

我想从一个 shell 脚本执行一个 DOMO CLI 的 jar 文件。 jar 文件本身有一些我想在调用主 jar 文件后调用的函数。我面临的问题是,在它执行 jar 文件后,我无法通过 shell 脚本传递要在该 jar 中执行的附加命令。它只是在调用 jar 后停止并且不接受进一步的命令。有人可以帮忙吗?下面是我从 shell 脚本调用的代码。

java -jar XX.jar

命令如下,跟在上面的 jar 后面。因此,一旦我们进入上面的 jar,我们必须一个接一个地执行下面的命令。我不确定如何通过 shell 脚本来实现这一点。

connect -s X.domo.com -t Ysssss

upload-dataset -a -i dhdhdhdh -f /prehdfs/dev/comres/herm/data/yyyy.csv

【问题讨论】:

  • java -jar XX.jar & 将启动java 进程并在后台运行它(这样您的其他命令就会执行)。
  • @ElliottFrisch 它确实会启动 java 进程,但之后不会运行命令。此后它显示空白屏幕。我执行如下: java -jar XX.jar & connect -s X.domo.com -t Ysssss
  • 这些行是否意味着标准地提供给 java 进程?如果是这样,请查看expect
  • @ElliottFrisch:我在帖子中没有看到任何&
  • @yogesh:Java 程序以何种方式期望额外的输入?通过命令行,通过标准输入,通过一些配置文件....?

标签: java linux bash jar domo


【解决方案1】:

您是否尝试过使用管道和输入。 当您在上面执行时,它会在子 shell 下运行它。

如果您还没有尝试过,您可以尝试以下格式

$ (echo "connect -s X.domo.com -t Ysssss" && cat) | java -jar XX.jar

【讨论】:

  • 您提供的代码有效,但如果我尝试同时运行另一个代码,则无法执行。我正在执行这样的代码:(echo "connect -s X.domo.com -t Ysssss" && upload-dataset -a -i dhdhdhdh -f /prehdfs/dev/comres/herm/data/yyyy.csv && cat) | java -jar XX.jar .... 它在 /prehdfs/dev/comres/herm/data/yyyy.csv 上给出错误“没有这样的文件或目录”。有什么建议吗?
  • 它只能运行 1 个命令,但如果需要运行超过 1 个命令,则会出错。
  • $ls -alt /prehdfs/dev/comres/herm/data/yyyy.csv 的输出是什么
【解决方案2】:

如果您可以在用例中引用文件,则可以将命令放入文件中。

文件:list_my_datasets.domo

connect -t ... -s ...
list-dataset
quit

然后运行命令:

java -jar domoUtil.jar -script list_my_datasets.domo > datasets

我想要其中的数据,所以我通过管道传输到一个文件(我必须在其中 grep 我想要的内容),但我相信你会忽略这一点,除非它有一些你想要检查的输出。我没有使用上传命令进行测试,但我希望任何替换或添加到示例中的命令都可以类似地工作。

Domo docs on scripting

【讨论】:

    最近更新 更多