#!/usr/bin/env bash function show() { if [[ "$#" -ne 1 ]]; then echo "usage: show " >&2 return 1 fi case "$(type -t "$1")" in alias) alias "$1" | bat -pl sh ;; keyword|builtin) help "$1" ;; function) declare -f "$1" | bat -l sh ;; file) local path="$(which "$1")" local real="$(realpath "$path")" [[ "$path" != "$real" ]] && echo "$path" bat "$real" ;; "") echo "$1 doesn't exist" ;; esac } function goto() { if [[ "$#" -ne 1 ]]; then echo "usage: goto " >&2 return 1 fi local path="$(which "$1")" [[ -z "$path" ]] && return 2 local real="$(realpath "$path")" cd "${real%/*}" } function rl() { local l="$1" local i=50 while [[ -L "$l" && $((i--)) > 0 ]]; do local n="$(readlink "$l")" echo "$l -> $n" l="$n" done [[ -e "$l" ]] && echo "$l" || echo "~nonexistent~" }