代码之家  ›  专栏  ›  技术社区  ›  Alexandru Cojocaru

从shell脚本运行java时“无此类文件或目录”

  •  1
  • Alexandru Cojocaru  · 技术社区  · 8 年前

    我正在尝试从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
    

    我尝试过直接在终端中运行相同的命令,它正在运行。两种支票样式均为6.15-all。震击和检查。xml就是它们应该有的地方。

    什么可能导致这个问题?

    2 回复  |  直到 8 年前
        1
  •  1
  •   VGR    8 年前

    改变 "${CHECKSTYLE}" ${CHECKSTYLE} (没有引号)。

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

        2
  •  1
  •   chicks adjan    8 年前

    当你出发时 "${CHECKSTYLE}" shell认为这就是您正在运行的命令。没有包含空格和选项的文件名。如果你把它简单地说成 ${CHECKSTYLE} (去掉引号)shell将正常处理它的空白部分,并将其拆分为适当的部分以创建流程。