"No such file or directory" 当 运行 java 来自 shell 脚本

"No such file or directory" when running java from shell script

我正在尝试 运行 来自亚马逊 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}" 时,shell 认为这是您的命令 运行。没有这样的文件名,其中包含空格和选项。如果您简单地将其调用为 ${CHECKSTYLE}(去掉引号),shell 将像往常一样处理空白并将其拆分为适当的部分以创建流程。

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

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

的文件