From ff41d9acc805099f27f1cf060ca9db72d2fdb74f Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Mon, 30 Jan 2023 12:24:02 -0600 Subject: Bash! --- bash/functions.bash | 166 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 109 insertions(+), 57 deletions(-) (limited to 'bash/functions.bash') diff --git a/bash/functions.bash b/bash/functions.bash index 64e8001..97f89b8 100644 --- a/bash/functions.bash +++ b/bash/functions.bash @@ -1,89 +1,141 @@ # Functions memq() { # memq ITEM ARRAY - ## Test whether an ITEM is a member of ARRAY. - ## Pass ARRAY as ${ARRAY[@]}. - local e needle="$1" - shift - for e; do - [[ "$e" == "$needle" ]] && { - return 0 - } - done - return 1 + ## Test whether an ITEM is a member of ARRAY. + ## Pass ARRAY as ${ARRAY[@]}. + local e needle="$1" + shift + for e; do + [[ "$e" == "$needle" ]] && { + return 0 + } + done + return 1 } rebashrc() { # rebashrc - ## Reload ~/.bashrc - printf "Loading ~/.bashrc..." >&2 - if source "$HOME/.bashrc"; then - echo "OK." >&2 - else - echo "ERROR!" >&2 - fi + ## Reload ~/.bashrc + printf "Loading ~/.bashrc..." >&2 + if source "$HOME/.bashrc"; then + echo "OK." >&2 + else + echo "ERROR!" >&2 + fi } first_which() { # first_which COMMAND... - ## Return the fully-qualified path of the first COMMAND found in $PATH. - while :; do - command -v "$1" && break - [ -z "$1" ] && return 1 - shift - done + ## Return the fully-qualified path of the first COMMAND found in $PATH. + while :; do + command -v "$1" && break + [ -z "$1" ] && return 1 + shift + done } please() { # please [COMMAND...] - # if run without arguments, run the last command with 'sudo' (aka sudo !!) - # if run WITH arguments, alias as sudo - history -d -1 - if [ -z "$1" ]; then - #set -- $(HISTTIMEFORMAT=$'\t' history 2 | sed 's/^.*\t//;q') - set -- $(fc -lnr | sed 1q) - fi - echo >&2 sudo "$@" - history -s sudo "$@" - "${DEBUG:-false}" || sudo "$@" + # if run without arguments, run the last command with 'sudo' (aka sudo !!) + # if run WITH arguments, alias as sudo + history -d -1 + if [ -z "$1" ]; then + #set -- $(HISTTIMEFORMAT=$'\t' history 2 | sed 's/^.*\t//;q') + set -- $(fc -lnr | sed 1q) + fi + echo >&2 sudo "$@" + history -s sudo "$@" + "${DEBUG:-false}" || sudo "$@" } mkcd() { - if [ $# -lt 1 ]; then - command cd - return "$?" - fi - if [ "x$1" = x- ]; then - command cd - - return "$?" - fi - if ! [ -d "$1" ]; then - read -p "$1 doesn't exist. Create (y/N)? " yn - case "$yn" in - n* | N*) return 1 ;; - y* | Y*) mkdir -p "$1" ;; - *) return 1 ;; - esac - fi - command cd "$1" + if [ $# -lt 1 ]; then + command cd + return "$?" + fi + if [ "x$1" = x- ]; then + command cd - + return "$?" + fi + if ! [ -d "$1" ]; then + read -p "$1 doesn't exist. Create (y/N)? " yn + case "$yn" in + n* | N*) return 1 ;; + y* | Y*) mkdir -p "$1" ;; + *) return 1 ;; + esac + fi + command cd "$1" } alias cd='mkcd ' # from tomasino # alias julian='echo "x = $(date +%s); scale=5; x / 86400 + 2440587.5" | bc' julian() { - echo "x = $(date ${1:+-d "$*"} +%s); scale=5; x / 86400 + 2440587.5" | bc + echo "x = $(date ${1:+-d "$*"} +%s); scale=5; x / 86400 + 2440587.5" | bc } # find files for pipelines f() { - find "${1:-$PWD}" -depth | - while read -r file; do - printf '%q\n' "$file" - done + find "${1:-$PWD}" -depth | + while read -r file; do + printf '%q\n' "$file" + done } words() { grep "$1" /usr/share/dict/words } -dict() { - curl "dict://dict.org/d:$1" | less +if ! command -v dict >/dev/null 2>&1; then + dict() { + curl "dict://dict.org/d:$1" | less + } +fi + +if command -v thesauracles >/dev/null 2>&1; then + thesauraphrase() { + for word in "$@"; do + thesauracles -q "$word" + done | tr '\n' ' ' + echo + } +fi + +up() { + : "${UP_TODIRECTORY:=..}" + : "${UP_SPECIALARGS:=true}" + local ret=0 + # echo "$UP_TODIRECTORY" "$UP_SPECIALARGS" + if "$UP_SPECIALARGS"; then + case "$1" in + '') cd "$UP_TODIRECTORY" ;; + up) UP_TODIRECTORY="${UP_TODIRECTORY}/.." up "${@:2}" ;; + --) UP_SPECIALARGS=false up "${@:2}" ;; + -*) if (( "$1" == -1 )); then + up + else + UP_TODIRECTORY="${UP_TODIRECTORY}/.." up $(( "$1" + 1 )) + fi + ;; + *) while cd ..; do + case "$PWD" in + /) ret=1; break ;; + */"$1") break ;; + esac + done + ;; + esac + else + case "$1" in + '') cd "$UP_TODIRECTORY" ;; + *) while cd ..; do + case "$PWD" in + /) ret=1; break ;; + */"$1") break ;; + esac + done + ;; + esac + fi + UP_TODIRECTORY= + UP_SPECIALARGS= + return "$ret" } -- cgit 1.4.1-21-gabe81