是否有任何shell(特別是bash或ksh)檢查程序,用於測試風格,最佳實踐,命名約定等的shell腳本? (類似於Lint for C或Perl :: Critic for Perl。)是否有像Lint或Perl :: Critic for shell腳本這樣的靜態分析工具?
我知道ksh,你可以通過運行ksh -n script.ksh
來進行語法檢查,但我希望得到的不僅僅是sytax檢查 - 這是一種解析/分析實際的代碼?
我可能運氣不好,但我想它不會傷害要求。
是否有任何shell(特別是bash或ksh)檢查程序,用於測試風格,最佳實踐,命名約定等的shell腳本? (類似於Lint for C或Perl :: Critic for Perl。)是否有像Lint或Perl :: Critic for shell腳本這樣的靜態分析工具?
我知道ksh,你可以通過運行ksh -n script.ksh
來進行語法檢查,但我希望得到的不僅僅是sytax檢查 - 這是一種解析/分析實際的代碼?
我可能運氣不好,但我想它不會傷害要求。
Debian和Ubuntu項目使用腳本checkbashisms
,該腳本查找可能表明某人依賴/bin/sh
爲bash
的特定模式。
除此之外,大部分炮彈有-n
選項來分析和報告錯誤。你可以檢查你的腳本對幾種不同的炮彈,以確保它僅使用便攜式語法:
for shell in zsh ksh bash dash sh
do
echo "Testing ${shell}"
${shell} -n my_script.sh
done
編輯添加:既然寫這個答案,shellcheck已被寫入,作爲建議in a later answer。與前面的建議相比,這可以更清晰地查看shell腳本。
I found shellcheck:它會檢測中引用你忽視了常見的錯誤和其他的東西(「因爲它的工作原理」)。
這太糟糕了,這取決於Haskell。這很好,但haskell是一個有點巨大的依賴。 – 2013-04-14 02:39:32
@Shurane - 依賴關係僅用於構建,而不是用於運行可執行文件。 – 2013-06-19 08:52:10
看來,唯一的依賴是一個瀏覽器。 – msanford 2014-01-22 20:52:46
我寫shlint包提供給Brian的回答呈現彈checkbashims和其他基本掉毛選項。
它可以通過rubygems(gem install shlint
)作爲一種堵嘴來安裝,但是您只需要perl(對於checkbashims)和一個符合POSIX的shell來解釋shlint命令本身。應該在OSX和Ubuntu上開箱即用。
酷 - 那個腳本看起來很有希望!從我缺乏發現其他事物和缺乏反應的角度來看,我認爲這可能是唯一可以做這種事情的東西。非常感謝! – BrianH 2010-09-10 18:24:09
是我還是這個選項不在bash和zsh的man page中? – log0 2012-05-24 14:45:07
'bash -n'就像'set -n'。 – fossilet 2012-08-24 16:15:22