【问题标题】:Command java works in interactive shell but not in shell script命令 java 在交互式 shell 中有效,但在 shell 脚本中无效
【发布时间】:2018-08-27 01:59:08
【问题描述】:

我写了一个非常简单的脚本,只有一个命令,这个脚本在交互式 shell 中工作,但不在脚本中。

#!/bin/sh
echo "--- Running game ---"
java -cp lib/java-json.jar:bin:. com.theaigames.game.warlight2.Warlight2 "../example-map.txt" "java -cp bot.BotStarter" "java -cp bot.BotStarter" 2>err.txt 1>out.txt

当我在执行脚本后显示 err.txt 的内容时,我得到了这个:

Error: Could not find or load main class com.theaigames.game.warlight2.Warlight2

但是当我在交互式 shell 中使用它时,程序会被执行:

Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONException
at com.theaigames.game.warlight2.Warlight2.setupGame(Warlight2.java:91)
at com.theaigames.engine.Engine.start(Engine.java:89)
at com.theaigames.game.warlight2.Warlight2.main(Warlight2.java:293)
Caused by: java.lang.ClassNotFoundException: org.json.JSONException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more

(java 错误不是这里的问题)

【问题讨论】:

  • 检查环境是否存在差异,例如类路径或当前工作目录。哦,顺便说一句,“linux”标签被误用了(见它的描述!)而且这个主题也有点误导,java 程序在这两种情况下都可以正常工作,这是里面发生的事情,而不是。跨度>
  • @UlrichEckhardt 事实上,正如下面所回答的,这是关于当前目录的问题。我仍然不明白为什么我在执行脚本或命令时在同一目录中时输出不同。

标签: java shell sh


【解决方案1】:

这可能是由当前工作目录路径引起的。您可以通过使用-Duser.dir JVM 参数来确保。

或者,您可以在执行java之前更改路径。

#!/bin/sh
cd <your dir>
java <some arguments>

【讨论】:

  • 我刚刚在执行之前添加了这个。 if [! -d "bin" ]; then cd $HOME/Documents/IA/Project/warlight2-engine-master/bin fi 在我的项目中有三个目录(bin、src、lib)。脚本是 bin。现在,当我在项目文件夹中执行程序时,它可以工作,但如果我不是,它就无法工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 2019-07-30
  • 2012-07-03
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多