diff --git a/nextnumber b/nextnumber index 6b91a92..f70ec50 100755 --- a/nextnumber +++ b/nextnumber @@ -1,13 +1,18 @@ #!/usr/bin/env bash # TODO: Find a less trashy way to get the next available error code -if ! shopt -s globstar -then +if ! shopt -s globstar; then echo "Error: This script depends on Bash 4." >&2 exit 1 fi -for i in 1 2 -do - last=$(grep -hv "^prop" ./**/*.hs | grep -Ewo "$i[0-9]{3}" | sort -n | tail -n 1) +for i in 1 2; do + last=$(grep --no-filename --invert-match "^prop" ./**/*.hs \ + | grep --extended-regexp --word-regexp --only-matching "$i[0-9]{3}" \ + | sort --numeric-sort \ + | tail --lines 1 +) echo "Next ${i}xxx: $((last+1))" done + +exit 0 + diff --git a/quickrun b/quickrun index 4bdf8eb..67d1d92 100755 --- a/quickrun +++ b/quickrun @@ -1,5 +1,7 @@ -#!/bin/bash +#!/usr/bin/env bash # quickrun runs ShellCheck in an interpreted mode. # This allows testing changes without recompiling. runghc -isrc -idist/build/autogen shellcheck.hs "$@" + +exit \ No newline at end of file diff --git a/quicktest b/quicktest index f4ed0b3..0654189 100755 --- a/quicktest +++ b/quicktest @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # quicktest runs the ShellCheck unit tests in an interpreted mode. # This allows running tests without compiling, which can be faster. # 'cabal test' remains the source of truth. @@ -16,7 +16,7 @@ if [[ $var == *$'\nTrue'* ]] then exit 0 else - grep -C 3 -e "Fail" -e "Tracing" <<< "$var" + grep --context 3 --regexp "Fail" --regexp "Tracing" <<< "${var}" exit 1 fi ) 2>&1 diff --git a/striptests b/striptests index 78c5220..679068f 100755 --- a/striptests +++ b/striptests @@ -5,15 +5,14 @@ set -o pipefail sponge() { - data="$(cat)" - printf '%s\n' "$data" > "$1" + local -r DATA="$(cat)" + printf '%s\n' "${DATA}" > "${1}" } modify() { - if ! "${@:2}" < "$1" | sponge "$1" - then + if ! "${@:2}" < "${1}" | sponge "${1}" { - printf 'Failed to modify %s: ' "$1" + printf 'Failed to modify %s: ' "${1}" printf '%q ' "${@:2}" printf '\n' } >&2 @@ -50,28 +49,23 @@ detestify() { ' } - - -if [[ ! -e ShellCheck.cabal ]] -then +if [[ ! -e 'ShellCheck.cabal' ]]; then echo "Run me from the ShellCheck directory." >&2 exit 1 fi -if [[ -d '.git' ]] && ! git diff --exit-code > /dev/null 2>&1 -then +if [[ -d '.git' ]] && ! git diff --exit-code > /dev/null 2>&1; then echo "You have local changes! These may be overwritten." >&2 exit 2 fi -modify ShellCheck.cabal sed -e ' +modify 'ShellCheck.cabal' sed -e ' /QuickCheck/d /^test-suite/{ s/.*//; q; } ' -find . -name '.git' -prune -o -type f -name '*.hs' -print | - while IFS= read -r file - do - modify "$file" detestify - done +while IFS= read -r file; do + modify "${file}" detestify +done < <(find . -name '.git' -prune -o -type f -name '*.hs' -print) +exit 0