set -euo pipefail
main() {
local found_errors="false"
local -r severity="error"
while IFS= read -r -d '' f; do
if [[ "$(file -b --mime-type "${f}" | sed 's|/.*||')" != "text" ]]; then
continue
fi
shebang="$(head -1 "${f}")"
if [[ "${f}" == *.sh ]] || \
[[ ${shebang} =~ ^#!/.*/bash.* ]] || \
[[ ${shebang} =~ ^#!/.*/env\ bash ]]; then
echo "[+] Checking ${f}"
shellcheck --external-sources --shell bash --severity="${severity}" "${f}" || found_errors="true"
bash -n "${f}" || found_errors="true"
fi
done< <(find . -path "./.git" -prune -o -path "./vendor" -prune -o -type f -print0)
if [[ "${found_errors}" != "false" ]]; then
echo "[+] Found errors with ShellCheck"
exit 1
fi
echo "[+] No error found with ShellCheck"
exit 0
}
main "${@}"