【问题标题】:"No such file or directory" when running java from shell script从shell脚本运行java时“没有这样的文件或目录”
【发布时间】:2016-05-13 04:25:33
【问题描述】:

我正在尝试从 Amazon Linux 机器运行脚本。该脚本会像这样调用 checkstyle(在名为 eval.sh 的脚本中):

CHECKSTYLE="java -jar /home/ec2-user/grader/ext/checkstyle-6.15-all.jar"
CHECKSTYLE_RULES="/home/ec2-user/grader/config/checks.xml"
CHECKSTYLE_OUT="quality.log"
"${CHECKSTYLE}" -c "${CHECKSTYLE_RULES}" -f xml -o "${CHECKSTYLE_OUT}" $(find "${_toCheck}" -name "*.java") 2>"quality.err"

当我运行它时,我在 quality.err 中收到以下错误:

 ./grader/eval.sh: line 10: java -jar /home/ec2-user/grader/ext/checkstyle-6.15-all.jar: No such file or directory

我尝试直接在终端中运行相同的命令并且它正在工作。 checkstyle-6.15-all.jar 和 checks.xml 都在它们应该在的位置。

什么可能导致这个问题?

【问题讨论】:

  • CHECKSTYLE="/usr/bin/java -jar /home/ec2-user/grader/ext/checkstyle-6.15-all.jar"
  • @JoaoVitorino:我仍然遇到同样的错误......

标签: java linux shell sh checkstyle


【解决方案1】:

将"${CHECKSTYLE}" 更改为${CHECKSTYLE}(不带引号)。

您将 CHECKSTYLE 变量的整个值作为一个单词传递(这就是引号的作用),因此 shell 正在寻找一个名为 java -jar 的相对目录,并试图在该目录下找到一个文件(不存在) 目录,路径为home/ec2-user/grader/ext/checkstyle-6.15-all.jar。

【讨论】:

  • 你们太棒了!这就是问题所在。非常感谢您的帮助,VGR 和小鸡!
【解决方案2】:

当你调用"${CHECKSTYLE}" 时,shell 认为这是你正在运行的命令。没有这样的文件名,其中包含您已包含的空格和选项。如果您简单地将其调用为${CHECKSTYLE}(去掉引号),shell 将照常处理空格并将其拆分为适当的部分以创建进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2016-08-15
    相关资源
    最近更新 更多