From: Ian Kelling Date: Thu, 27 Jul 2023 06:56:06 +0000 (-0400) Subject: satisfy shellcheck X-Git-Url: https://iankelling.org/git/?a=commitdiff_plain;h=cb002f1dc386fdf42b30133351b90e6d2a662174;p=distro-setup satisfy shellcheck --- diff --git a/.bashrc b/.bashrc index ba355b4..470a1a4 100644 --- a/.bashrc +++ b/.bashrc @@ -43,6 +43,7 @@ if [[ $LC_USEBASHRC != t && ( $SSH_CONNECTION || $TERM == linux ) ]]; then # so if we want it we don't have to restart our ssh connection. brc() { export LC_USEBASHRC=t + # shellcheck disable=SC1090 # obviously, no need to follow a sourcing of this file source ~/.bashrc } return 0 @@ -97,6 +98,6 @@ return 0 # kitty puts this here on startup, i need to build with some option to # avoid it, whatever. -# BEGIN_KITTY_SHELL_INTEGRATION -if test -n "$KITTY_INSTALLATION_DIR" -a -e "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; then source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; fi -# END_KITTY_SHELL_INTEGRATION +## BEGIN_KITTY_SHELL_INTEGRATION +# if test -n "$KITTY_INSTALLATION_DIR" -a -e "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; then source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; fi +## END_KITTY_SHELL_INTEGRATION diff --git a/brc b/brc index 83721fc..a29651b 100644 --- a/brc +++ b/brc @@ -5,11 +5,19 @@ # Use source ~/.bashrc instead of doing bash -l when running a script # so this can set extdebug and avoid the bash debugger. + + if [[ -s /a/bin/errhandle/err ]]; then + # shellcheck source=/a/bin/errhandle/err source /a/bin/errhandle/err -elif [[ -s $bashrc_dir/err ]]; then + # wtf, shellcheck doesn't allow disabling warnings in elifs +else + # bleh shellcheck can't handle disabling in an elif, so nesting this if. + # shellcheck disable=SC2154 # set in .bashrc + if [[ -s $bashrc_dir/err ]]; then # shellcheck source=/a/bin/errhandle/err source $bashrc_dir/err + fi fi # In t8, it runs clear_console for login shells by default. I don't want @@ -261,16 +269,16 @@ if [[ $SOE ]]; then fi - - mysrc() { local path dir file path=$1 dir=${path%/*} file=${path##*/} if [[ -s $path ]]; then + # shellcheck disable=SC1090 # this is dynamic, shellcheck can't follow it. source $path elif [[ -s $bashrc_dir/$file ]]; then + # shellcheck disable=SC1090 # this is dynamic, shellcheck can't follow it. source $bashrc_dir/$file fi } @@ -312,8 +320,8 @@ ccomp() { c=$(complete -p $src 2>/dev/null) || return 0 fi # remove $src( .*|$) - c=${c% $src} - c=${c%% $src *} + c=${c% "$src"} + c=${c%% "$src" *} eval $c $* } @@ -451,7 +459,7 @@ cl() { tac ~/.cdirs | awk '!seen[$0]++' | head -n 200 | tac | sponge ~/.cdirs || [[ $? == 141 ]] fi - for (( j=$start; j >= 0; j-- )); do + for (( j=start; j >= 0; j-- )); do line="${lines[$j]}" if [[ ! $line || ${alines[$line]} || ! -d "$line" || $line == "$PWD" || line == "$HOME" ]]; then continue @@ -486,7 +494,7 @@ bl() { fi j=1 if (( start >= 0 )); then - for (( i=$start; i >= 0 ; i-- )); do + for (( i=start; i >= 0 ; i-- )); do printf "%s %s\n" $j ${_dir_back[i]} j=$(( j + 1 )) if (( j >= max )); then @@ -507,7 +515,7 @@ bl() { fi echo -- j=1 - for (( i=$start; i >= 0 ; i-- )); do + for (( i=start; i >= 0 ; i-- )); do printf "%s %s\n" $j ${_dir_forward[i]} j=$(( j + 1 )) if (( j >= max )); then @@ -535,7 +543,7 @@ pd() { "$@" |& pee cat "logger -t $tag" || ret=$? echo "exited with status=$ret" | pee cat "logger -t $tag" # this avoids any err-catch - (( $ret == 0 )) || return $ret + (( ret == 0 )) || return $ret } ccomp time pd @@ -583,7 +591,7 @@ jdo() { unset jr_pid fg &>/dev/null ||: # this avoids any err-catch - (( $ret == 0 )) || return $ret + (( ret == 0 )) || return $ret } ccomp time jdo #### end fsf section @@ -609,7 +617,7 @@ chere() { # file cut copy and paste, like the text buffers :) # I havnt tested these. _fbufferinit() { # internal use - ! [[ $my_f_tempdir ]] && my_f_tempdir=$(mktemp -d) + ! [[ $my_f_tempdir ]] && my_f_tempdir="$(mktemp -d)" rm -rf "${my_f_tempdir:?}"/* } fcp() { # file cp @@ -641,8 +649,7 @@ _khfix_common() { ip_entry=$ip host_entry=$host fi - tmpfile=$(mktemp) - if [[ $host != $ip ]]; then + if [[ $host != "$ip" ]]; then key=$(ssh-keygen -F "$host_entry" -f $file | sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/') if [[ $key ]]; then grep -Fv "$key" "$file" | sponge "$file" @@ -698,6 +705,7 @@ done hexipv4() { + # shellcheck disable=SC2046 disable=SC2001 disable=SC2183 # hacks, expected printf '%d.%d.%d.%d\n' $(echo $1 | sed 's/../0x& /g') } @@ -1049,6 +1057,7 @@ ediff() { } # mail related +# shellcheck disable=SC2120 # we expect to pass arguments in use outside this file etail() { ngset tail -F /var/log/exim4/mainlog /var/log/exim4/*main /var/log/exim4/paniclog /var/log/exim4/*panic -n 200 "$@" @@ -1082,7 +1091,7 @@ eoldpids() { fi for pid in $(pgrep -f '^/usr/sbin/exim4( |$)'); do # the daemonpid gets reexeced on HUP (service reloads), keeping its same old timestamp - if [[ $pid == $daemonpid ]]; then + if [[ $pid == "$daemonpid" ]]; then continue fi piduptime=$(awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next } END { printf "%9.0f\n", now - ($20/ticks) }' /proc/uptime RS=')' /proc/$pid/stat) ||: # sometimes pids disappear pretty fast @@ -1106,12 +1115,13 @@ etailnew() { } # exim watch as old pids go away ewatchold() { - local configtime pid piduptime now + local configtime pid piduptime now tmpstr local -i count local -a oldpids count=0 while true; do - oldpids=($(eoldpids)) + tmpstr=$(eoldpids) + mapfile -t oldpids <<<"$tmpstr" if (( ! ${#oldpids[@]} )); then return fi @@ -1207,7 +1217,7 @@ ffremux() { echo ffremux error expected args >&2 return 1 fi - tmpd=$(mktemp -d) + tmpd="$(mktemp -d)" for f; do tmpf=$tmpd/"${f##*/}" ffmpeg -i "$f" -c:v copy -c:a copy $tmpf @@ -1239,9 +1249,9 @@ fp() { dir="${1%/*}" base="/${1##*/}" # CDPATH because having it set will cause cd to possibly print output - CDPATH= cd "$dir" + CDPATH='' cd "$dir" printf "%s%s\n" "$PWD" "$base" - CDPATH= cd "$initial_pwd" + CDPATH='' cd "$initial_pwd" OLDPWD="$initial_oldpwd" else printf "%s/%s\n" "$PWD" "$1" @@ -1253,7 +1263,7 @@ fpd() { initial_oldpwd="$OLDPWD" initial_pwd="$PWD" dir="$1" - CDPATH= cd "$dir" + CDPATH='' cd "$dir" printf "%s%s\n" "$PWD" "$base" cd "$initial_pwd" OLDPWD="$initial_oldpwd" @@ -1276,7 +1286,7 @@ frozenrm() { local ids=() while read -r line; do printf '%s\n' "$line" - ids+=($(printf '%s\n' "$line" |gr frozen|awk '{print $3}')) + ids+=("$(printf '%s\n' "$line" |gr frozen|awk '{print $3}')") done < <(s mailq) echo "sleeping for 2 in case you change your mind" sleep 2 @@ -1374,6 +1384,7 @@ g() { if [[ $EMACSDIR ]]; then # Alter the path here, otherwise the nfs mount gets triggered on the # first path lookup when emacs is not being used. + # shellcheck disable=SC2098 disable=SC2097 # false positive PATH="$EMACSDIR/lib-src:$EMACSDIR/src:$PATH" EHOME=$HOME HOME=$EMACSDIR m emacsclient -a "" $args "$@" else if $gdb; then @@ -1382,8 +1393,8 @@ g() { # m gdb -ex="set follow-fork-mode child" -ex=r -ex=quit --args emacs --daemon m emacsclient -a "" $args "$@" sleep 1 - cd /a/opt/emacs-$(distro-name)$(distro-num) - s gdb -p $(pgrep -f 'emacs --daemon') -ex c + cd "/a/opt/emacs-$(distro-name)$(distro-num)" + s gdb -p "$(pgrep -f 'emacs --daemon')" -ex c cd - else m emacsclient -a "" $args "$@" @@ -1449,6 +1460,7 @@ hl() { col=$((60 - input_len)) printf "\e[1;97;41m%s" "$*" if (( col > 0 )); then + # shellcheck disable=SC2046 # needed to work as intended. a better way would be like hr above. printf "\e[1;97;41m \e[0m%.0s" $(eval echo "{1..${col}}") fi echo @@ -1469,11 +1481,11 @@ hrcat() { local f; for f; do [[ -f $f ]] || continue; hr; echo "$f"; cat "$f"; d # On first use, you input username/pass and it gets an oath token so you dont have to repeat # it\'s at ~/.config/hub hub() { - local up uptar updir p v + local up uptar updir p re # example https://github.com/github/hub/releases/download/v2.14.2/hub-linux-amd64-2.14.2.tgz up=$(wget -q -O- https://api.github.com/repos/github/hub/releases/latest | jq -r .assets[].browser_download_url | grep linux-amd64) re='[[:space:]]' - if [[ ! $up || $up == $re ]]; then + if [[ ! $up || $up =~ $re ]]; then echo "failed to get good update url. got: $up" fi uptar=${up##*/} @@ -1572,7 +1584,7 @@ jtail() { jr() { journalctl "$@" ; } jrf() { journalctl -f "$@" ; } jru() { - journalctl -u exim4 _SYSTEMD_INVOCATION_ID=$(systemctl show -p InvocationID --value $1) + journalctl -u exim4 _SYSTEMD_INVOCATION_ID="$(systemctl show -p InvocationID --value $1)" } @@ -1636,6 +1648,7 @@ low() { # make filenames lowercase, remove bad chars fi f="${arg##*/}" new="${f,,}" # downcase + # shellcheck disable=SC2031 # seems like a shellcheck bug new="${new//[^a-zA-Z0-9._-]/_}" # sub bad chars new="${new#"${new%%[[:alnum:]]*}"}" # remove leading/trailing non-alnum new="${new%"${new##*[[:alnum:]]}"}" @@ -1673,9 +1686,9 @@ ksu() { # history search unique # inexplicably truncated in the past. histrm() { history -n - HISTTIMEFORMAT= history | awk -v IGNORECASE=1 '{ a=$1; sub(/^ *[^ ]+ */, "") }; /'"$*"'/' + HISTTIMEFORMAT='' history | awk -v IGNORECASE=1 '{ a=$1; sub(/^ *[^ ]+ */, "") }; /'"$*"'/' read -r -p "press anything but contrl-c to delete" - for entry in $(HISTTIMEFORMAT= history | awk -v IGNORECASE=1 '{ a=$1; sub(/^ *[^ ]+ */, "") }; /'"$*"'/ { print a }' | tac); do + for entry in $(HISTTIMEFORMAT='' history | awk -v IGNORECASE=1 '{ a=$1; sub(/^ *[^ ]+ */, "") }; /'"$*"'/ { print a }' | tac); do history -d $entry done history -w @@ -1696,7 +1709,7 @@ mkc() { ccomp mkdir mkc mkct() { - mkc $(mktemp -d) + mkc "$(mktemp -d)" } # mkdir the last arg, cp the rest into it mkcp() { @@ -1773,7 +1786,7 @@ p6() { ping6 "$@" 2001:4860:4860::8888; } pkx() { # package extract local pkg cached tmp f - c $(mktemp -d) + c "$(mktemp -d)" pkg=$1 # shellcheck disable=SC2012 cached=$(ls -t /var/cache/apt/archives/$pkg* | tail -n1 2>/dev/null) ||: @@ -1789,19 +1802,21 @@ pkx() { # package extract # pgrep and kill pk1() { - local pid - pid=($(pgrep -f "$*")) - case ${#pid[@]} in + local tmpf + local -a pids + tmpf=$(pgrep -f "$*") + mapfile -t pids <<<"$tmpf" + case ${#pids[@]} in 1) # shellcheck disable=SC2128 { - ps -F $pid - m kill $pid + ps -F ${pids[0]} + m kill ${pids[0]} } ;; 0) echo "no pid found" ;; *) - ps -F ${pid[@]} + ps -F ${pids[@]} ;; esac } @@ -1860,6 +1875,7 @@ EOF # reapply bashrc reb() { + # shellcheck disable=SC1090 # expected to not follow source ~/.bashrc } @@ -2001,7 +2017,7 @@ ccomp sudo s sb se safe_rename() { # warn and dont rename if file exists. # mv -n exists, but it\'s silent if [[ $# != 2 ]]; then - echo safe_rename error: $# args, need 2 >2 + echo safe_rename error: $# args, need 2 >&2 return 1 fi if [[ $1 != "$2" ]]; then # yes, we want to silently ignore this @@ -2047,7 +2063,7 @@ setini() { # set a value in a .ini style file if [[ -s $file ]]; then sed -ri -f - "$file" <&2 + echo 'error: missing SL_INFO_DIR env var' >&2 return 1 fi @@ -2281,7 +2299,7 @@ sl() { if $haveinfo && [[ $type == b ]]; then info_sec=${tmp::10} - read files_sec _ < <(find -L $SL_FILES_DIR -printf "%T@ %p\n" | sort -nr || [[ $? == 141 || ${PIPESTATUS[0]} == 32 ]] ) + read -r files_sec _ < <(find -L $SL_FILES_DIR -printf "%T@ %p\n" | sort -nr || [[ $? == 141 || ${PIPESTATUS[0]} == 32 ]] ) files_sec=${files_sec%%.*} if (( files_sec > info_sec )); then dorsync=true @@ -2292,7 +2310,7 @@ sl() { sync_dirname=${SL_FILES_DIR##*/} if [[ ! $SL_FILES_DIR ]]; then - echo error: missing '$SL_FILES_DIR' env var >&2 + echo 'error: missing SL_FILES_DIR env var' >&2 return 1 fi @@ -2362,8 +2380,12 @@ slog() { while getopts "lt" option do case $option in - l ) arg_base=$logdir ;; - t ) do_stamp=true ;; + l) arg_base=$logdir ;; + t) do_stamp=true ;; + *) + echo error: bad option + return 1 + ;; esac done shift $((OPTIND - 1)) @@ -2394,7 +2416,7 @@ srm () { srun() { scp $2 $1:/tmp - ssh $1 /tmp/${2##*/} $(printf "%q\n" "${@:2}") + ssh $1 "/tmp/${2##*/}" "$(printf "%q\n" "${@:2}")" } @@ -2456,10 +2478,11 @@ psoff() { # however, DEBUG is not inherited, so we need to run it outside a function. # And we want to run set -x afterwards to avoid spam, so we cram everything # in here, and then it will run after this function is done. - PROMPT_COMMAND='trap DEBUG; unset PROMPT_COMMAND; PS1="\w \$ "' + # # set as array to satisfy shellcheck, but it is equivalent to setting it as non-array + PROMPT_COMMAND=('trap DEBUG; unset PROMPT_COMMAND; PS1="\w \$ "') } pson() { - PROMPT_COMMAND=prompt-command + PROMPT_COMMAND=(prompt-command) if [[ $TERM == *(screen*|xterm*|rxvt*) ]]; then trap 'settitle "$BASH_COMMAND"' DEBUG fi @@ -2502,7 +2525,9 @@ nonet() { m() { printf "%s\n" "$*"; "$@"; } -# update file. note: duplicated in mail-setup +# update file. note: duplicated in mail-setup. +# updates $ur u result to true or false +# updates $reload to true if file updated is in /etc/systemd/system u() { local tmp tmpdir dest="$1" local base="${dest##*/}" @@ -2511,14 +2536,17 @@ u() { # dest has a directory component mkdir -p "$dir" fi + # shellcheck disable=SC2034 # see comment at top of function ur=false # u result - tmpdir=$(mktemp -d) + tmpdir="$(mktemp -d)" cat >$tmpdir/"$base" tmp=$(rsync -ic $tmpdir/"$base" "$dest") if [[ $tmp ]]; then printf "%s\n" "$tmp" + # shellcheck disable=SC2034 # see comment at top of function ur=true if [[ $dest == /etc/systemd/system/* ]]; then + # shellcheck disable=SC2034 # see comment at top of function reload=true fi fi @@ -2578,7 +2606,7 @@ zr() { local tmp tmp=$(type -p "$1") if [[ $tmp ]]; then - cd $(mktemp -d) + cd "$(mktemp -d)" cp -a "$tmp" . shift ./"${tmp##*/}" "$@" @@ -2643,12 +2671,12 @@ spark() for n in $numbers do - _spark_echo -n ${ticks[$(( ((($n-$min)<<8)/$f) ))]} + _spark_echo -n ${ticks[$(( (((n-min)<<8)/f) ))]} done _spark_echo } -pdfwc() { local f; for f; do echo "$f" $(pdfinfo "$f" | awk '/^Pages:/ {print $2}'); done } +pdfwc() { local f; for f; do echo "$f" "$(pdfinfo "$f" | awk '/^Pages:/ {print $2}')"; done } # * misc stuff @@ -2657,6 +2685,7 @@ if $use_color && type -p tput &>/dev/null; then term_bold="$(tput bold)" term_red="$(tput setaf 1)" term_green="$(tput setaf 2)" + # shellcheck disable=SC2034 # expected term_yellow="$(tput setaf 3)" term_purple="$(tput setaf 5)" term_nocolor="$(tput sgr0)" # no font attributes @@ -2730,7 +2759,7 @@ if [[ $- == *i* ]]; then # faster than sourceing the file im guessing if [[ -e /dev/shm/iank-status && ! -e /tmp/quiet-status ]]; then - eval $(< /dev/shm/iank-status) + eval "$(< /dev/shm/iank-status)" fi if [[ $MAIL_HOST && $MAIL_HOST != "$HOSTNAME" ]]; then ps_char="@ $ps_char" @@ -2754,7 +2783,7 @@ if [[ $- == *i* ]]; then # titelbar below #echo -ne "$_title_escape $HOSTNAME ${PWD/#$HOME/~} \007" } - PROMPT_COMMAND=prompt-command + PROMPT_COMMAND=(prompt-command) if [[ $TERM == screen* ]]; then _title_escape="\033]..2;" @@ -2771,7 +2800,7 @@ if [[ $- == *i* ]]; then # These are some checks to help ensure we dont set the title at # times that the debug trap is running other than the case we # want. Some of them might not be needed. - if (( ${#FUNCNAME[@]} != 1 || ${#BASH_ARGC[@]} != 2 || $BASH_SUBSHELL != 0 )); then + if (( ${#FUNCNAME[@]} != 1 || ${#BASH_ARGC[@]} != 2 || BASH_SUBSHELL != 0 )); then return 0 fi if [[ $1 == prompt-command ]]; then @@ -2803,8 +2832,10 @@ fi # best practice unset IFS -# shellcheck disable=SC1090 -[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* +if [[ -s "$HOME/.rvm/scripts/rvm" ]]; then + # shellcheck disable=SC1091 + source "$HOME/.rvm/scripts/rvm" +fi # I had this idea to start a bash shell which would run an initial # command passed through this env variable, then continue on diff --git a/brc2 b/brc2 index 025008b..4d83fed 100644 --- a/brc2 +++ b/brc2 @@ -3812,9 +3812,9 @@ rgv() { } amall() { - printf "$(tput setaf 5 2>/dev/null ||:)█ coresite █$(tput sgr0 2>/dev/null||:)" + echo "$(tput setaf 5 2>/dev/null ||:)█ coresite █$(tput sgr0 2>/dev/null||:)" amfsf "$@" - printf "$(tput setaf 5 2>/dev/null ||:)█ office █$(tput sgr0 2>/dev/null||:)" + echo "$(tput setaf 5 2>/dev/null ||:)█ office █$(tput sgr0 2>/dev/null||:)" amoffice "$@" } amallq() { # amall quiet @@ -3833,8 +3833,9 @@ amls() { amall silence query "$@" } amrmall() { - amfsf silence expire $(amfsf silence query -q) - amoffice silence expire $(amoffice silence query -q) + # note: not sure if quoting of this arg is correct + amfsf silence expire "$(amfsf silence query -q)" + amoffice silence expire "$(amoffice silence query -q)" }