2013-09-24 89 views
-2

我正在讀取一些來自輸入的命令並在運行時在我的java程序中執行。如果有任何語法或語義錯誤,它將在運行時失敗。而不是我想早點失敗。所以我想在執行之前驗證命令。在執行前驗證bash命令

我該怎麼做?有沒有簡單的方法。

例:

grep -P -o "cpums=[^ ]+" | cut -f2 -d= | cut -f1 -d"]" | awk '{a+=$1;} 
END {print a;} 

在這裏,單引號(')在這個命令的末尾被遺漏。它會在我的Java程序運行時失敗。如果它可能會提早失敗,那將會很棒。所以我只想在我的程序開始時驗證每個命令。

我正在尋找最佳方法。

+2

「_是否有簡單的方法_」號 – jlordo

+1

說'bash -n文件名'。有關更多信息,請參閱上述問題 – devnull

+0

我不是閱讀腳本。所有都是單獨的命令。我想驗證每一個單獨的命令。 –

回答

2

不,沒有簡單的方法。有一個很難的方法,它涉及到你提出一套規則並使用某種解析器。有一種低效的方式,其中涉及試圖執行命令只是爲了查看它是否有效。可能還有其他方法,但我認爲他們中的任何一個都不會很簡單。

你試過Google嗎?其他人已經寫了一個小但非零的可能性。

+0

感謝您的回覆.. 我在考慮只寫分析器。在此之前,我正在尋找其他最佳方法.. –

0

試試這個:

sh -n yourscriptfile 
bash -n yourscriptfile 

set -u也有助於捕捉錯別字和未初始化變量

+0

你能解釋它是什麼嗎?在它的當前狀態很難 – Bart

+0

我不是閱讀腳本所有都是單獨的命令我想驗證每個單獨的命令 –

+0

只是語法驗證 – SriniV

1

檢查語法的最好方法和參數是對應於正則表達式來解析用戶輸入什麼你在期待。

如果它與您等待的wath不匹配,那麼您可以向用戶提示「使用說明」。

0

哦,那真的很「容易」。

  1. 拿bash語法,例如從here或採取ANTLR語法形式here
  2. 將語法移植到java。你可以去除所有的C部分,並從真實的bahs語法中移植核心語法,或者使用預先構造的ANTLR語法。用你的語法ANTLR,xTextparser combinators。這三種解決方案都需要外部工具
  3. 在運行bash命令之前,可以使用語法對其進行驗證。