Cron job does NOT get the environment variables set in .bashrc Cron job does NOT get the environment variables set in .bashrc bash bash

Cron job does NOT get the environment variables set in .bashrc


The reason for source ~/.bashrc not working is the contents on your ~/.bashrc (default one from Ubuntu 12.04). If you look in it you will see on lines 5 and 6 the following:

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

PS1 variable is set for an interactive shell, so it's absent when run via cron, even though you are executing it as a login shell. This is confirmed by contents of the file produced by /bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test':

+ source /home/plee/.bashrc++ '[' -z '' ']'++ return

To make source ~/.bashrc work, comment out the line that checks for presence of the PS1 variable in ~/.bashrc:

#[ -z "$PS1" ] && return

This will make bash execute the entire contents of ~/.bashrc via cron


Answer provided by @alex is correct but in Ubuntu 13.10 the code has been modified a little. There is no $PS1 variable but in lines 6-9 there is a code

case $- in    *i*) ;;          *) return;; esac

Just commenting out the line which returns works. i.e. the code below works

case $- in    *i*) ;;       #   *) return;; esac


I just tried a file .env_setup_rc file with only one line export EDITOR=vim, surprisingly it's working.

So I guess there is something in .bashrc conflicting with the cron job bash command.