Pragmatism in the real world

Setting the umask when using Capistrano

This is one of those posts to remind me how I solved a problem last time!

I’ve recently been using Capistrano for deployment and other remote tasks and it’s proving quite useful.

One problem I ran into was that the umask was being set to 022 when using Capistrano and 002 when I was ssh’d into the server itself.

After a bit of research, I discovered that the secret is to put the umask statement in my .bashrc file before the line that says [ -z "$PS1" ] && return as when Capistrano logs into the server, it doesn’t have an interactive shell (and so $PS1 isn’t set.

My .bashrc now looks like this:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

umask 002
export PATH=~/bin:$PATH

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

(This is on Ubuntu 12.04 LTS)