Change cd default directory (bash)

Jay picture Jay · Jun 4, 2014 · Viewed 7.1k times · Source

I'm looking for a way to change the default directory of cd, and I'm wondering if this is possible. I tried adding

alias "cd=cd ~/Documents/Github" 

to .bashrc, but this obviously doesn't work because it breaks the cd command so that you cannot use cd for anything but going to that directory. Is there some export that I could put in .bashrc to do this? I do not want to change my home directory, just the default directory cd goes to. I ask because I regularly use cd to change to my default directory that I am programming in and would like to not have to type cd ~/workspace or cd and then cd workspace every time I want to change to the directory ~/workspace.

Answer

mklement0 picture mklement0 · Jun 4, 2014

Here's a simpler alternative using an alias:

alias cd='HOME=~/Documents/Github cd'
  • While this redefines $HOME, it does so ONLY for the cd command, so should be safe(*).
  • This also obviates the need for any custom parameter pre-parsing.

If you place this in ~/.bashrc, you should get the desired behavior.

Note that, by default, this alias will NOT be in effect in scripts (non-interactive shells), as alias expansion is by default disabled there (use shopt -s expand_aliases to explicitly enable).


(*) @chepner points out one restriction: with the alias in place you won't be able to do HOME=/somewhere/else cd, i.e., you won't be able to redefine (override) $HOME again, ad-hoc. As he further states, though, it's hard to imagine why anyone would want to do that.