从shell脚本运行java时“没有这样的文件或目录”

时间:2016-02-03 19:36:49

标签: java linux shell sh checkstyle

我正在尝试从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都应该是它们的位置。

什么可能导致这个问题?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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