Speaking of secrets, here’s how I keep them in the shell. Why do I have secrets in the shell? Typically, they are things like API keys and passwords for web services that I use in scripts. For example, I have a script display issues that are assigned to me on the desktop using Geektool. Or scripts to tweet from the command line, when I’m in a command line kind of mood.

It’s pretty simple, first I create a file ~/.secrets, with key value pairs:


Then in my ~/.bashrc, my preferred start up file, I put:

if [ -f "$HOME/.secrets" ]; then
    set -o allexport
    . "$HOME/.secrets"
    set +o allexport

This is my laziness coming out. As it implies on the tin, set -o allexport causes any variables you set to be automatically be exported, setting them in the environment. Otherwise, ~/.secrets would need to look like:

export API_KEY=something
export OTHER_SECRET=this_thing

Look at all that typing I saved! I it would be bad™ to leave this on all the time which is why I turn it off again with set +o allexport. If you are really lazy, you can toggle this behavior set -a and set +a, but I like the readability of using the full setting name.

Anyway, this makes $API_KEY available in apps and on the command line, and you’re ready to go! Keep in mind that the key to happiness here is to keep the ~/.secrets out of where ever you store your dotfiles. Don’t check these in. Consider keeping them out of your backups, if they’re not encrypted. Do stick a copy in whatever you use for secure notes (1Password, etc.)