Bash – How to Set an Alias for a Specific File or Directory

aliasbash

There are several files I work with often. For instance some configuration files or log files. Let's say the Apache log file. I often want to tail or grep it. Instead of writing:

tail -50 /var/log/apache2/error_log

I prefer to write

tail -50 apachelog

So that apachelog functions as an alias for this filename. But if I define an alias in my bashrc, it needs to be a whole command; it (apparently) can not be an alias for a filename so that you can reference it later. Is there a way to achieve this?

NOTE: I have a large variety of files and a large variety of different commands I want to run, so creating functions or aliasses for all of those different options will not be my preferred solution.

Best Answer

You can define a variable, and use a $ to recall its value:

apachelog=/var/log/apache2/error_log
tail -50 $apachelog

You're not going to do better in bash. In zsh, you can define global aliases, that are expanded everywhere on the command line:

alias -g apachelog=/var/log/apache2/error_log
tail -50 apachelog

But I don't recommend it, because now if you ever want to pass the string apachelog as an argument to a command, you need to remember to quote it.

Related Question