Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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.

share|improve this question
add comment

4 Answers

up vote 6 down vote accepted

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.

share|improve this answer
    
Good answer, especially the "Do not recommend this" part. That sounds like a recipe for disaster with a poor alias name choice... –  Shadur Nov 28 '11 at 14:09
add comment

An alias to a directory is link. That's why one possibility is to create a bunch of links to the files of interest in one directory. Then alias rtail to tail so that it looks for files in that directory.

share|improve this answer
add comment

You could create a function and write your command "backwards"

apachelog() {
  "$@" /var/log/apache2/error_log
}

apachelog tail -50
share|improve this answer
add comment

Put this in your ~/.bashrc

 alias tailapache='tail -50 /var/log/apache2/error_log'

do a source ~/.bashrc or start a new bash session...

then you just need to type "tailapache"

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.