我正在尝试从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都应该是它们的位置。
什么可能导致这个问题?
答案 0 :(得分:1)
当您调用"${CHECKSTYLE}"
时,shell认为这是您正在运行的命令。没有这样的文件名,空格和选项已包含在那里。如果你将它简单地称为${CHECKSTYLE}
(删除引号),shell将正常处理空格并将其拆分为适当的部分以创建进程。
答案 1 :(得分:1)
将"${CHECKSTYLE}"
更改为${CHECKSTYLE}
(不带引号)。
您将CHECKSTYLE变量的整个值作为单个单词传递(这是引号的作用),因此shell正在查找名为java -jar
的相对目录,并且正在尝试查找该(不存在)目录下的文件,路径为home/ec2-user/grader/ext/checkstyle-6.15-all.jar
。