首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java代码可以手动运行,而不是从Shell脚本运行呢?

为什么Java代码可以手动运行,而不是从Shell脚本运行呢?
EN

Ask Ubuntu用户
提问于 2022-03-02 18:11:17
回答 1查看 731关注 0票数 1

嗨,有一个令人沮丧的问题:在我的Ubuntu22.04机器上,我有一些Java/Maven代码,可以从命令行手动运行:

代码语言:javascript
复制
me@UbuntuV2:~/home/me/path/to/Java/Code$
me@UbuntuV2:~/home/me/path/to/Java/Code$ mvn test
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< MyCode.java >--------------------
...code runs fine...

这很好,但是我需要从shell脚本中运行相同的代码:

代码语言:javascript
复制
#!/bin/bash

echo "Running the script!"
cd /home/me/path/to/Java/Code
mvn test
echo "Script finished."

奇怪的是,脚本可以启动Java代码,但是脚本运行的代码会抛出异常:

代码语言:javascript
复制
me@UbuntuV2:~/home/me$
me@UbuntuV2:~/home/me$ ./runScript.sh
Running the script!
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< MyCode.java >--------------------
2022-03-02 12:29:44,899 main ERROR Unable to access file:/home/me/path/to/Java/Code/src/test/resources/log4j2.xml java.io.FileNotFoundException: /home/me/path/to/Java/Code/src/test/resources/log4j2.xml (No such file or directory)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
    at java.base/java.io.FileInputStream.(FileInputStream.java:157)
    ...etc...

这太奇怪了,对吧?当运行shell脚本时,Java代码突然无法访问"log4j2.xml“文件。(“没有这样的文件或目录”),但是文件已经到位,当我手动运行代码时,代码没有打开它的问题。

那么,当我手动运行代码时,有什么不同呢?我绞尽脑汁想出什么是不同的。我做了以下所有的事情:

  • 验证用户me从bash手动运行代码,就像脚本一样。
  • 以用户me的身份运行脚本,该用户可以手动运行代码
  • 通过在脚本中添加要检查的me命令,验证脚本是否以whoami形式运行
  • 使用pwd命令验证脚本是否从正确的目录运行代码。
  • 使用脚本中的命令me将脚本的PATH变量设置为与用户export PATH=$PATH:/usr/local/sbin:...完全相同的路径
  • 使用visudo命令确保用户me可以无限地访问Ubuntu上的所有文件
  • 确保用户me拥有脚本并具有执行权限
  • 对着乌本图大喊大叫

问题还会是什么?我没有编写Java代码,所以也许代码本身是通过相对路径而不是绝对路径来引用这个log4j2.xml文件的.?但是,如果是这样的话,为什么代码在手动运行时工作呢?

我知道这是一个开放的问题,但是在运行这段代码的脚本和人工启动的版本之间还有什么不同之处。我一定是错过了什么..。

EN

回答 1

Ask Ubuntu用户

发布于 2022-03-05 02:46:58

我认为脚本中的cd路径可能有问题。

mvn test工作时,查看命令提示符:

me@UbuntuV2:~/home/me/path/to/Java/Code$ mvn test

前面的~表示$HOME位于显示的路径之前,这意味着完整的路径实际上是/home/me/home/me/path/to/Java/Code。这与脚本中的/home/me/path/to/Java/Code不同。

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1395644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档