How to make an "alias" for a long path?
Since it's an environment variable (alias has a different definition in bash
), you need to evaluate it with something like:
cd "${myFold}"
or:
cp "${myFold}/someFile" /somewhere/else
But I actually find it easier, if you just want the ease of switching into that directory, to create a real alias (in one of the bash
startup files like .bashrc
), so I can save keystrokes:
alias myfold='cd ~/Files/Scripts/Main'
Then you can just use (without the cd
):
myfold
To get rid of the definition, you use unalias
. The following transcript shows all of these in action:
pax> cd ; pwd ; ls -ald footy/home/paxdrwxr-xr-x 2 pax pax 4096 Jul 28 11:00 footypax> footydir=/home/pax/footy ; cd "$footydir" ; pwd/home/pax/footypax> cd ; pwd/home/paxpax> alias footy='cd /home/pax/footy' ; footy ; pwd/home/pax/footypax> unalias footy ; footybash: footy: command not found
There is a shell option cdable_vars
:
cdable_vars
If this is set, an argument to thecd
builtin command that is not a directory is assumed to be the name of a variable whose value is the directory to change to.
You could add this to your .bashrc
:
shopt -s cdable_varsexport myFold=$HOME/Files/Scripts/Main
Notice that I've replaced the tilde with $HOME
; quotes prevent tilde expansion and Bash would complain that there is no directory ~/Files/Scripts/Main
.
Now you can use this as follows:
cd myFold
No $
required. That's the whole point, actually – as shown in other answers, cd "$myFold"
works without the shell option. cd myFold
also works if the path in myFold
contains spaces, no quoting required.
This usually even works with tab autocompletion as the _cd
function in bash_completion
checks if cdable_vars
is set – but not every implementation does it in the same manner, so you might have to source bash_completion
again in your .bashrc
(or edit /etc/profile
to set the shell option).
Other shells have similar options, for example Zsh (cdablevars
).
Maybe it's better to use links
Soft Link
Symbolic or soft link (files or directories, more flexible and self documenting)
# Source Linkln -s /home/jake/doc/test/2000/something /home/jake/xxx
Hard Link
Hard link (files only, less flexible and not self documenting)
# Source Linkln /home/jake/doc/test/2000/something /home/jake/xxx
How to create a link to a directory
Hint: If you need not to see the link in your home you can start it with a dot . ; then it will be hidden by default then you can access it like
cd ~/.myHiddelLongDirLink