58 lines
1.3 KiB
Bash

#!/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 <name> [<dir>]: mark <dir> (default \$PWD) as <name>"
echo "mark -g <name> : goto mark <name>"
echo "mark -s <name> : show mark <name>"
echo "mark -d <name> : delete mark <name>"
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
}