#!/usr/bin/env sh c() { destination="$1" if [ -z "${SHELLSTORE}" ] then return 1 fi store=${SHELLSTORE}/chdir_history # Make sure the store exists touch "${store}" if [ -z "$1" ] then destination=$(tail -n 1 "${store}") if [ "${destination}" != "" ] then sed '$ d' "${store}" > "${store}.sed" mv "${store}.sed" "${store}" fi else dots=$(expr "${destination}" : '^\.\+$') if [ "$dots" -gt 2 ] then destination="" while [ "${dots}" -gt 1 ] do destination="${destination}../" dots=$((dots - 1)) done fi fi owd=$(pwd) cd "${destination}" || return 2 l [ ! -z "$1" ] && printf "%s\n" "${owd}" >> "${store}" unset destination dots store }