#!/bin/bash
VERBOSE_OUTPUT=0
usage() {
echo "Usage: $(basename "$0") [ -v|--verbose ] <dir|file> [ <dir|file> ... ]"
}
verbose() {
if [ "${VERBOSE_OUTPUT}" -eq 1 ] ; then
echo "$@" >&2
fi
}
if [ $# -eq 0 ] ; then
echo "ERROR: No arguments given."
usage
exit 1
fi
case $1 in
-v|--verbose) VERBOSE_OUTPUT=1; shift ;;
esac
filter_files() {
while read -r file ; do
if [ -L "$file" ] ; then
verbose "Ignoring symlink $file."
continue
fi
verbose "Will scan $file"
echo "$file"
done
}
detect_shell_files() {
find -H "$@" -type f -not -path '*/\.git/*' -exec grep -l '^#!/bin/\(bash\|sh\)' {} +
find -H "$@" -name '*.sh' -not -path '*/\.git/*'
}
# Run shellcheck on all files (we should also ignore symlinks)
detect_shell_files "$@" | filter_files | sort -u | xargs shellcheck
# vim: set tabstop=2:shiftwidth=2:expandtab: