3

I was wondering whether it is possible to create abbreviations that can be used in terminal. I know about alias command, but am not sure whether that can be used for what I am looking for.

Example: Say I often need to copy stuff from folder ~/Dropbox/thisfolder. I know that I can create a shortcut to switch to this folder by creating an alias, such as,

alias tf="cd ~/Dropbox/thisfolder"

However, if I do

alias justpath="~/Dropbox/thisfolder"

then, I cannot use commands such as cp justpath/blahfile ./. Is it possible to do something like this using some other way to abbreviate the path ~/Dropbox/thisfolder?

  • 3
    Use a variable, e.g. justpath=~/Dropbox/thisfolder then cp $justpath... – Mikel May 18 '12 at 1:29
  • 1
    I use symlinks, which I collect in a "shallow" easily accessible directory, like ~/Desktop. This way the short paths are shell-agnostic. The only caveat is to be careful running recursive commands on the symlink dir (tell them to not follow symlinks). – jw013 May 18 '12 at 1:36
  • 1
    This depends a lot on your shell; there are several good ways in zsh – Michael Mrozek May 18 '12 at 1:41
6

In any shell, you can define a variable.

justpath=~/Dropbox/thisfolder

(Note: no quotes here, otherwise the ~ wouldn't be expanded.) Prefix it with a $ to use it:

cp $justpath/blahfile .

Note that unless you're using zsh, if the value contains whitespace or wildcards *?\[, you need to put double quotes around the variable expansion when you use it.

justpath=~/'Dropbox/that folder'
cp "$justpath/blahfile" .

Zsh has (as it often does) better facilities. You can define named directories accessed with the syntax ~foo, generalizing the case where foo is a user name and ~foo is this user's home directory.

alias -d justpath=~/Dropbox/thisfolder
cp ~justpath/blahfile .

And for more complex cases, zsh offers dynamic named directories.

  • Strictly speaking that's not for any shell. In csh the variables are set with the set command. – Alexander Shcheblikin Dec 5 '12 at 20:35
  • @AlexanderShcheblikin “Shell” in the unix world today (as opposed to 20 years ago) usually means Bourne-style shell by default. Csh, fish, psh, non-command-line shells and so on aren't included. – Gilles Dec 5 '12 at 20:55
  • I agree, csh is mostly terrible, but "default" and "any" are quite different things anyway. – Alexander Shcheblikin Dec 5 '12 at 22:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.