Question

There are certain folders I am cd'ing into all day long...for instance, "dev" which is in my Documents folder.

I had this bright idea to set up symlinks so I could simply type "dev" and Terminal would cd into that directory. This doesn't seem to work though. My two attempts are below.

Anyone know how to do this or is there a better way?

ln -s /Users/kelly/Documents/Dev/ dev
ln -s 'cd /Users/kelly/Documents/Dev/' dev

$ dev
bash: dev: command not found
Was it helpful?

Solution

With a symlink you can use

ln -s your/dev/directory/ dev

but you can only use it in the directory you created it in and in the form of cd dev.

If you just want to type dev at any point, use an alias:

alias dev="cd your/dev/direcrory/"

(this should then be in your ~/.bashrc)

OTHER TIPS

You could use an alias for dev. Add to your ${HOME}/.bashrc

 alias dev='cd /Users/kelly/Documents/Dev/' 

and bash correctly parses ~ in an alias:

 alias dev='cd ~/Documents/Dev/' 

Using an alias eliminates the need for the symbolic link at all.

You have to write cd dev in your case, but it might be better for you to use bash aliases...

Write in your $HOME/.bash_aliases file:

alias dev='cd /Users/kelly/Documents/Dev/'

after opening a new terminal executing dev will give you, what you want...

In your $HOME/.bashrc, declare an array which maps directories to aliases.

declare -A __diraliasmap=(
  [dev]="/Users/kelly/Documents/Dev"
  [other]="/Users/kelly/Documents"
)

Also define a command_not_found_handle function. If defined, this function will be run by bash when a command is not found. In the function, check whether the command which failed is listed as an alias for a directory and, if so, cd to the associated directory.

command_not_found_handle()
{
  if [[ ${__diraliasmap[$1]+set} = set ]]; then
    builtin cd "${__diraliasmap[$1]}"
  else
    false
  fi
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top