#!/bin/bash function mark() { local MARKS_FILE=${HOME}/.marks local param="$1" local mark_name="" local mark_value="" if [[ ! -f ${MARKS_FILE} ]]; then touch ${MARKS_FILE} fi case "$param" in -g|-s|-d) mark_name="$2" mark_value=$(grep -i "^$mark_name:" ${MARKS_FILE} | sed -e 's/[^:]*://') if [[ "$mark_value" == "" ]]; then echo "\`$mark_name' is NOT in mark list!" return fi ;; esac case "$param" in -g) cd "$mark_value" ;; -s) echo "$mark_value" ;; -h|--help) echo "mark []: mark (default \$PWD) as " echo "mark -g : goto mark " echo "mark -s : show mark " echo "mark -d : delete mark " echo "mark -l : list all marks" ;; -l) cat ${MARKS_FILE} ;; -d) grep -v "^$mark_name:" ${MARKS_FILE} > ${MARKS_FILE}.tmp mv ${MARKS_FILE}.tmp ${MARKS_FILE} ;; -*) echo "Unrecognized option" ;; *) local mark_name="$1" local mark_value="$2" if [[ "$mark_value" == "" ]]; then mark_value=`pwd` fi grep -v "^$mark_name:" ${MARKS_FILE} > ${MARKS_FILE}.tmp mv ${MARKS_FILE}.tmp ${MARKS_FILE} echo "$mark_name:$mark_value" >> ${MARKS_FILE} ;; esac }