2016-02-03 90 views
1

我試圖從Amazon Linux機器運行腳本。該腳本調用這樣的CheckStyle(在腳本調用eval.sh):當從shell腳本運行java時,「沒有這樣的文件或目錄」

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都是它們應該在的位置。

什麼可能導致此問題?

+1

CHECKSTYLE =「/ usr/bin/java -jar /home/ec2-user/grader/ext/checkstyle-6.15-all.jar」 –

+0

@JoaoVitorino:我仍然收到同樣的錯誤... –

回答

1

更改"${CHECKSTYLE}"${CHECKSTYLE}(不含引號)。

您將CHECKSTYLE變量的整個值作爲單個單詞(這是引號的作用)傳遞,因此shell正在查找名爲java -jar的相對目錄,並且正試圖在該目錄下找到一個文件(不存在)目錄與路徑home/ec2-user/grader/ext/checkstyle-6.15-all.jar

+0

您你們真棒!這是問題所在。非常感謝您的幫助,VGR和小雞! –

1

當您啓用"${CHECKSTYLE}"時,shell會認爲這是您正在運行的命令。這裏沒有包含空格和選項的文件名。如果您簡單地將其作爲${CHECKSTYLE}(刪除引號)來進行調用,那麼shell將像正常情況一樣處理空白,並將其拆分爲用於創建過程的相應部分。

相關問題