Changing your terminal’s appearance based on environment variables

I’m scared of the production database. Anyone else? I can copy the production database down to my local instance anytime I want, so I have an up-to-date version I can work off of while developing locally, but sometimes I actually need to make changes in production. This is fine, but I get nervous that I’ll do that, and then continue working off of production, when I don’t mean to. (No matter how careful I am, I am human, and humans make mistakes). So I decided to protect myself from … myself.

When I open a new terminal window and am in the Django virtualenv that I use for the codebase, the DATABASE_URL environment variable is automatically set to my local instance via the postactivate file, and my terminal looks like this:

A quick command changes both the DATABASE_URL environment variable to point to the production instance, and also makes my terminal look like this:

Won’t accidentally forget which database you’re connected to with your terminal looking like that, will you? I also have one to connect to staging, giving me this:

The Script

It’s pretty simple. iTerm has profiles, which allows you to change anything about the appearance of your terminal. I have 3, my default, production, and staging profiles — they’re all basically the same except for the background color. Once you’ve created your profie(s), the following script goes in a file by whatever name you like (no file extension necessary) in /usr/local/bin:

export DATABASE_URL=<Your database URL goes here. You don't get to see mine>
echo -e “\033]50;SetProfile=Production\a”

In the line beginning with echo, you can change the word “Production” to whatever you named the relevant iTerm profile.

Note: Copying and pasting directly from Medium may or may not work. The " characters render differently here, and may not execute properly. If it isn’t working, try deleting the quote characters and retyping them directly in your editor.

You can then make the file executable by running:

chmod +x <filename>

and then actually run it with:

source <filename>


(Beware: if you forget the source before the filename, your terminal’s appearance will change, but the environment variable won’t.)