mirror of
https://github.com/sbrl/bin.git
synced 2018-01-10 21:33:46 +00:00
58 lines
1.1 KiB
Bash
58 lines
1.1 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
# From http://unix.stackexchange.com/a/31181/64687
|
||
|
|
||
|
### Help ###
|
||
|
: '
|
||
|
# same as pushd +1
|
||
|
$ pd 1
|
||
|
|
||
|
# show a prompt, choose by number
|
||
|
$ pd
|
||
|
0 ~/Dropbox/Projects/ds/test
|
||
|
1 /Project/Warnest/docs
|
||
|
2 /tmp
|
||
|
? 2
|
||
|
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs
|
||
|
|
||
|
# or choose by substring match
|
||
|
$ pd
|
||
|
0 /tmp
|
||
|
1 ~/Dropbox/Projects/ds/test
|
||
|
2 /Project/Warnest/docs
|
||
|
? doc
|
||
|
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test
|
||
|
|
||
|
# substring without prompt
|
||
|
$ pd test
|
||
|
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp
|
||
|
'
|
||
|
|
||
|
function pd()
|
||
|
{
|
||
|
if [[ $# -ge 1 ]];
|
||
|
then
|
||
|
choice="$1"
|
||
|
else
|
||
|
dirs -v
|
||
|
echo -n "? "
|
||
|
read choice
|
||
|
fi
|
||
|
if [[ -n $choice ]];
|
||
|
then
|
||
|
declare -i cnum="$choice"
|
||
|
if [[ $cnum != $choice ]];
|
||
|
then #choice is not numeric
|
||
|
choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
|
||
|
cnum="$choice"
|
||
|
if [[ -z $choice || $cnum != $choice ]];
|
||
|
then
|
||
|
echo "$choice not found"
|
||
|
return
|
||
|
fi
|
||
|
fi
|
||
|
choice="+$choice"
|
||
|
fi
|
||
|
pushd $choice
|
||
|
}
|