grep loses coloring when run from bash script

Solution 1:

You've probably defined grep as an alias for grep --color=auto in your .bashrc, but that's not loaded by scripts. Use an explicit grep --color in your script.

Solution 2:

When you run a script, a new shell is spawned to do so. This new environment doesn't have the same settings as your default shell. As to how to get the coloring back, I'm not sure. You might try sourcing your profile at the start of the script:

#!/bin/bash
source $HOME/.bash_profile

or whichever file makes sense on your particular unix flavor (.profile, .bash_rc, .bashrc .bash_profile) to name a few.