Permalink
Browse files

Don’t source .bash_profile when PS1 is not set (for non-interactive s…

…hells).


Stolen from @janmoesen’s https://github.com/janmoesen/tilde/blob/master/.bashrc:

# This might seem backwards when you look at the "Bash startup files" reference
# <http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files> or
# the "INVOCATION" section in the man page. However, my workflow typically is:
#
# * Open a terminal with four shells in tabs
# * Edit code in Vim, and shell out using ":sh"
#
# The initial four shells are login shells, so they source ~/.bash_profile.
# The shells spawned by Vim are not login shells, but they /are/ interactive.
# They look for .bashrc, but not .bash_profile. Because they are interactive,
# PS1 is set, so I know it is OK to run all the shell initialisation code.
#
# If I were to put the contents of ~/.bash_profile in ~/.bashrc and make the
# former source the latter, I would have to wrap the entire contents of the
# latter in a huge "if [ -n "$PS1" ]; then ... fi" block. That does not really
# help readability, does it?
#
# The difference between a login shell and an interactive non-login shell is
# moot for me, so I consider all interactive shells to be equal and wanting
# the same treatment.
#
# If you're wondering what a non-interactive shell might be, i.e. when PS1
# might not be set, try this:
#
#     ssh localhost 'echo "PS1: >$PS1<"'
#
  • Loading branch information...
1 parent dc72b4c commit 1c9245f3cba0f49f90b8e2a43dbc6fba3eff29e6 @mathiasbynens mathiasbynens committed Oct 22, 2011
Showing with 1 addition and 1 deletion.
  1. +1 −1 .bashrc
View
@@ -1 +1 @@
-source "$HOME/.bash_profile"
+[ -n "$PS1" ] && source ~/.bash_profile

0 comments on commit 1c9245f

Please sign in to comment.