Advertisement
starbeamrainbowlabs

Remember bash directories

Feb 13th, 2016
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.14 KB | None | 0 0
  1. _DIRS_DIRS=~/.dirs
  2.  
  3. # Silently make sure ~/.dirs exists
  4. \mkdir -p $_DIRS_DIRS
  5.  
  6. _DIRS_FILE=$_DIRS_DIRS/$BASH_SESSION_ID
  7.  
  8. save_dirs() {
  9.     \dirs -l -p > $_DIRS_FILE
  10. }
  11.  
  12. load_dirs() {
  13.     # Start out with a fresh directory stack.
  14.     \dirs -c
  15.  
  16.     # Make sure there's at least an empty file.
  17.     if [[ ! -f "$_DIRS_FILE" ]]; then
  18.         touch $_DIRS_FILE
  19.     fi
  20.  
  21.     # Start out in the directory we left off at
  22.     for dir in $(cat $_DIRS_FILE) ; do
  23.         \cd $dir  > /dev/null 2>&1
  24.  
  25.         # Just need the first line
  26.         break
  27.     done
  28.  
  29.     # Restore saved dir stack in reverse order.
  30.     for dir in $(cat $_DIRS_FILE | tac) ; do
  31.         # But don't duplicate the directory we left off at
  32.         if [[ $PWD != $dir ]]; then
  33.             \pushd -n $dir > /dev/null 2>&1
  34.         fi
  35.     done
  36. }
  37.  
  38. # NOTE: aliases can't take parameters, so we have to alias to functions.
  39.  
  40. _dirs_pushd()
  41. {
  42.     \pushd "$@"
  43.     save_dirs
  44. }
  45. alias pushd=_dirs_pushd
  46.  
  47. _dirs_popd()
  48. {
  49.     \popd "$@"
  50.     save_dirs
  51. }
  52. alias popd=_dirs_popd
  53.  
  54. # In case 'dirs -c' is used.
  55. _dirs_dirs()
  56. {
  57.     \dirs "$@"
  58.     save_dirs
  59. }
  60. alias dirs=_dirs_dirs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement