Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've added the following to my ~/.bash_profile

# opens "flashlog.txt" in Console
alias trace='open -a /Applications/Utilities/ ~/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt'

# clears "flashlog.txt"
alias cleartrace='cat /dev/null > ~/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt'

So, in Terminal I can enter the command "trace" and view the flashlog.txt in the Console. I can also enter the command "cleartrace" and the flashlog.txt is cleared. These work great.

However, if I create a new bash script with the following I get an error "cleartrace: command not found":

cp -v -f ActivityLauncher.swf ../launchers/addu02l05_launcher_1.swf
open "/Applications/Adobe Flash CS4/Players/Flash" ./test.swf 

Why does an alias work in the Terminal, but not when called from a script? (How do I fix it?)

share|improve this question
up vote 4 down vote accepted

This is because bash only reads ~/.bash_profile for interactive shells. Move your alias definitions to ~/.bashrc and it should work. Take a look at the INVOCATION section of the bash manpage for more details on how this all works.

share|improve this answer
This is not true.… – Tyilo Aug 21 '11 at 2:44

The Bash info file says:

For almost every purpose, shell functions are preferred over aliases.

Functions can be exported, for one thing.

share|improve this answer
Functions can also call other functions! (Aliases cannot) – sixtyfootersdude Mar 9 '10 at 15:03

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .