diff options
Diffstat (limited to '.local')
-rwxr-xr-x | .local/bin/config-path | 90 | ||||
-rwxr-xr-x | .local/bin/config-symlinks | 9 | ||||
-rwxr-xr-x | .local/bin/cronic | 48 |
3 files changed, 103 insertions, 44 deletions
diff --git a/.local/bin/config-path b/.local/bin/config-path index f4c2342..7cd1fcd 100755 --- a/.local/bin/config-path +++ b/.local/bin/config-path @@ -1,22 +1,14 @@ #!/bin/bash -the_guts() { - # Add generic prefixes - add_prefix "$HOME" - add_prefix "$HOME/.local.$(uname -m)" - add_prefix "$HOME/.local" - add_prefix "$HOME/.prefix.$(uname -m)" - add_prefix "$HOME/.prefix" - - # Add rubygem prefixes - local dir - for dir in "$HOME"/.gem/*; do - # Only add it if we have that type of ruby - if type "${dir##*/}" &>/dev/null; then - add_prefix "$dir"/* - fi - done -} +# All the prefixes to consider +prefixes=( + "$HOME" + "$HOME/.local.$(uname -m)" + "$HOME/.local" + "$HOME/.prefix.$(uname -m)" + "$HOME/.prefix" + "$HOME"/.gem/ruby/* +) in_array() { local needle=$1; shift @@ -28,41 +20,55 @@ in_array() { return 1 } -add_prefix() { - local prefix=$1 - local dir +var_init() { + eval "ary_$1=(\$$1)" +} - # PATH - dir="$prefix/bin" - if [[ -d "$dir" ]] && ! in_array "$dir" "${paths[@]}"; then - paths=("$dir" "${paths[@]}") - fi +var_add() { + local varname=ary_$1; shift + local var_all="${varname}[@]" + local dirs=("$@") - # RUBYLIB - dir="$prefix/lib" - if [[ -d "$dir" ]] && ! in_array "$dir" "${rubylibs[@]}"; then - rubylibs=("$dir" "${rubylibs[@]}") - fi + local dir + for dir in "${dirs[@]}"; do + if [[ -d "$dir" ]] && ! in_array "$dir" "${!var_all}"; then + eval "$varname=(\"\$dir\" \"\${$var_all}\")" + fi + done +} + +var_done() { + eval "$1=\"\${ary_$1[*]}\"" + declare -p $1 } main() { + IFS=: # Import existing values - declare -ga paths rubylibs - IFS=: paths=($PATH) - IFS=: rubylibs=($RUBYLIB) - - the_guts + var_init PATH + var_init MANPATH + var_init LD_LIBRARY_PATH + var_init RUBYLIB + var_init PERL5LIB - # Put our values into the env variables - IFS=: PATH="${paths[*]}" - IFS=: RUBYLIB="${rubylibs[*]}" + # Scan through prefixes + for prefix in "${prefixes[@]}"; do + var_add PATH "$prefix/bin" "$prefix/sbin" + var_add MANPATH "$prefix/share/man" + var_add LD_LIBRARY_PATH "$prefix"/lib{,32,64} + var_add RUBYLIB "$prefix"/lib{,32,64} + var_add PERL5LIB "$prefix"/lib{,32,64}/perl5 + done # Finally, print the values - # The sed bit here is the only time we call an external program + # The `sed` bit here is the only time we call an external program { - declare -p PATH - declare -p RUBYLIB + var_done PATH + var_done MANPATH + var_done LD_LIBRARY_PATH + var_done RUBYLIB + var_done PERL5LIB } | sed 's/^declare \(-\S* \)*//' } -main +main "$@" diff --git a/.local/bin/config-symlinks b/.local/bin/config-symlinks index 0831ca3..7d889f0 100755 --- a/.local/bin/config-symlinks +++ b/.local/bin/config-symlinks @@ -1,6 +1,8 @@ #!/bin/bash -sed -e '/^\s*$/d' -e '/#/d' symlinks | while read _target _link; do +declare -i ret=0 + +while read _target _link; do target="$(sed -rn 's|[^/]+/|../|g;s|/[^/]+$|/|p' <<<"$_link")${_target}" link="$HOME/$_link" if [[ -L "$link" ]]; then @@ -8,8 +10,11 @@ sed -e '/^\s*$/d' -e '/#/d' symlinks | while read _target _link; do fi if [[ -e "$link" ]]; then echo "ERROR: file exists: $link" >> /dev/stderr + ret=1 else mkdir -p "${link%/*}" ln -s "$target" "$link" fi -done +done < <(sed -e '/^\s*$/d' -e '/#/d' "$XDG_CONFIG_HOME/symlinks") + +exit $ret diff --git a/.local/bin/cronic b/.local/bin/cronic new file mode 100755 index 0000000..8536f29 --- /dev/null +++ b/.local/bin/cronic @@ -0,0 +1,48 @@ +#!/bin/bash + +# Cronic v2 - cron job report wrapper +# Copyright 2007 Chuck Houpt. No rights reserved, whatsoever. +# Public Domain CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +set -eu + +OUT=/tmp/cronic.out.$$ +ERR=/tmp/cronic.err.$$ +TRACE=/tmp/cronic.trace.$$ + +set +e +"$@" >$OUT 2>$TRACE +RESULT=$? +set -e + +PATTERN="^${PS4:0:1}\\+${PS4:1}" +if grep -aq "$PATTERN" $TRACE +then + ! grep -av "$PATTERN" $TRACE > $ERR +else + ERR=$TRACE +fi + +if [ $RESULT -ne 0 -o -s "$ERR" ] + then + echo "Cronic detected failure or error output for the command:" + echo "$@" + echo + echo "RESULT CODE: $RESULT" + echo + echo "ERROR OUTPUT:" + cat "$ERR" + echo + echo "STANDARD OUTPUT:" + cat "$OUT" + if [ $TRACE != $ERR ] + then + echo + echo "TRACE-ERROR OUTPUT:" + cat "$TRACE" + fi +fi + +rm -f "$OUT" +rm -f "$ERR" +rm -f "$TRACE" |