mirror of
https://github.com/koalaman/shellcheck
synced 2025-08-22 06:13:54 -07:00
utils/webcheck.sh: Check script using web tool (http://shellcheck.net/)
This commit is contained in:
parent
6d9e8472e6
commit
a419593501
1 changed files with 102 additions and 0 deletions
102
utils/webcheck.sh
Executable file
102
utils/webcheck.sh
Executable file
|
@ -0,0 +1,102 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Purpose: Check script for error using http://shellcheck.net/
|
||||
# Author : Anh K. Huynh
|
||||
# Date : 2015 Aug 06
|
||||
# License: MIT license
|
||||
# Note : The original script is from `pacapt` project
|
||||
# https://github.com/icy/pacapt/blob/ng/bin/check.sh
|
||||
|
||||
_simple_check() {
|
||||
bash -n "$@"
|
||||
}
|
||||
|
||||
_perl_check() {
|
||||
perl -MURI::Escape -MJSON -e 'exit(0)'
|
||||
}
|
||||
|
||||
_shellcheck() {
|
||||
local _data
|
||||
|
||||
_data="$( \
|
||||
perl -MURI::Escape \
|
||||
-e '
|
||||
my $stream = do { local $/; <STDIN>; };
|
||||
print uri_escape($stream);
|
||||
'
|
||||
)"
|
||||
|
||||
curl -LsSo- \
|
||||
'http://www.shellcheck.net/shellcheck.php' \
|
||||
-H 'Accept: application/json, text/javascript, */*' \
|
||||
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
|
||||
-H 'Host: www.shellcheck.net' \
|
||||
-H 'Referer: http://www.shellcheck.net/' \
|
||||
-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0' \
|
||||
-H 'X-Requested-With: XMLHttpRequest' \
|
||||
--data "script=$_data" \
|
||||
| perl -e '
|
||||
use JSON;
|
||||
my $stream = do { local $/; <>; };
|
||||
my $output = decode_json($stream);
|
||||
my $colors = {
|
||||
"error" => "\e[1;31m",
|
||||
"warning" => "\e[1;33m",
|
||||
"style" => "\e[1;36m",
|
||||
"default" => "\e[0m",
|
||||
"reset" => "\e[0m"
|
||||
};
|
||||
|
||||
foreach (keys @{$output}) {
|
||||
my $comment = @{$output}[$_];
|
||||
my $color = $colors->{$comment->{"level"}} || $colors->{"default"};
|
||||
|
||||
printf("%s%7s %4d: line %4d col %2d, msg %s%s\n",
|
||||
$color,
|
||||
$comment->{"level"}, $comment->{"code"},
|
||||
$comment->{"line"}, $comment->{"column"},
|
||||
$comment->{"message"},
|
||||
$colors->{"reset"}
|
||||
);
|
||||
}
|
||||
'
|
||||
}
|
||||
|
||||
_check_file() {
|
||||
local _file="${1:-/x/x/x/x/x/x/x/}"
|
||||
|
||||
[[ -f "$_file" ]] \
|
||||
|| {
|
||||
echo >&2 ":: File not found '$_file'"
|
||||
return 1
|
||||
}
|
||||
|
||||
_simple_check "$_file" || return
|
||||
_perl_check || return
|
||||
_shellcheck < "$_file"
|
||||
}
|
||||
|
||||
_help() {
|
||||
cat <<'EOF'
|
||||
Description
|
||||
Check your Bash script using http://shellcheck.net/.
|
||||
|
||||
Requirements
|
||||
|
||||
Perl with URI::Escape and JSON modules
|
||||
|
||||
Syntax
|
||||
|
||||
webcheck.sh [file1] [file2] [...]
|
||||
EOF
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
""|"help"|"-h"|"--help") _help; exit ;;
|
||||
esac
|
||||
|
||||
while (( $# )); do
|
||||
echo >&2 ":: Checking '${1}'..."
|
||||
_check_file "${1}"
|
||||
shift
|
||||
done
|
Loading…
Add table
Add a link
Reference in a new issue