view .bash_profile @ 14:94cfcec3b5b6

When bash is called non-interactively, PS1 is unset. However, if it's a login shell, ~/.bash_profile is still sourced. Therefore, testing PS1 tells us if this is a login but non-interactive shell (such as: ssh host 'uptime'). Testing PS1 before setting it preserves that state for later tests if desired.
author huston@80426f53-59d1-405d-934b-f07cd76f4a1a
date Sun, 30 Aug 2009 06:49:10 +0000
parents dacbbae5965c
children fe83d9892ee3
line wrap: on
line source

# .bash_profile
# This file is sourced for interactive login shells, or
# non-interactive shells with the --login option.  So things which you
# want to happen only on login shells should go here.

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

# BASH_ENV is sourced for non-interactive shells; however, since we
# source ~/.bashrc above I don't think we have to here also.
# export BASH_ENV=$HOME/.bashrc

# These lines are helpful if you routinely might login without passing an
# ssh-agent's authentication through.  This way when you login, an agent is
# exec'd for you (the corresponding lines in .bash_logout should kill the
# agent when you logout, however they sometimes fail such as when killing your
# shell without a proper logout or closing the connection).  I left it here,
# though I personally don't use/need it anymore.

#if [ "X$SSH_AUTH_SOCK" = "X" ] ; then
#   eval `/usr/bin/ssh-agent`
#fi

# This part is quite useful if you have your dotfiles stored in subversion
# (though it could be edited fairly easily for any other version control
# system I'm sure).  We check the timestamp of the file '$HOME/.dotfilets'.
# If it's older than a month, run a 'svn st -u' and touch it; this way we
# check once per month to see if we forgot to pull down an updated version.

# First set $STAT and $DATE since the syntax of the commands is different
# between Linux and Mac OS X.  If this is run elsewhere, the eval will be
# false and the test not done below, so it's safe to not bother checking for
# zero-length variables on the test - it just won't run the svn status, so you
# won't be prompted if there's newer files available in your repository.

[[ `uname` == "Darwin" ]] && {
   STAT="stat -f %m -t %s $HOME/.dotfilets"
   DATE="date -v -1m +%s"
}

[[ `uname` == "Linux" ]] && {
   STAT="stat -c %Y $HOME/.dotfilets"
   DATE="date -d \"1 month ago\" +%s"
}

[[ ! -f $HOME/.dotfilets || \
   `eval $STAT` -lt `eval $DATE` ]] && {
   echo Dotfiles last checked over a month ago, running a status test.
   svn st -u && touch $HOME/.dotfilets &
}