Handle the case where $HOME has a trailing slash.
[profile.git] / .bash_profile
index a89f59e..5170519 100644 (file)
@@ -1,4 +1,15 @@
-if tty -s || [ "${0:0:1}" = "-" -o "$1" = "force" ]; then
+if [ -t 0 -o "${0:0:1}" = "-" -o "$1" = "force" ]; then
+  # Set up PROFILE_HOME if called outside HOME.
+  if [ -z "$PROFILE_HOME" ]; then
+    # BASH_SOURCE isn't available prior to bash 3.
+    profile_home=${BASH_SOURCE%/*}
+    [ -n "$profile_home" -a -d "$profile_home" -a ! "${profile_home:0:1}" = "/" ] && profile_home=$(readlink -f "$profile_home" 2>/dev/null)
+    [ "$profile_home" = "$BASH_SOURCE" ] && profile_home=$PWD
+    [ "$profile_home" = "$HOME" ] || PROFILE_HOME=$profile_home
+    PROFILE_RC="$profile_home/.bash_profile"
+    unset profile_home
+  fi
+
   # Remember if nocaseglob was on.
   shopt -q nocaseglob
   nocg=$?
@@ -25,12 +36,12 @@ BECOME.bashrc"
   PATH=/usr/bin:/bin:/usr/ccs/bin
 
   # Sort all scripts by dependencies.
-  profile_d=${PROFILE_HOME:-~}/.profile.d
+  PROFILE_D=${PROFILE_HOME:-~}/.profile.d
   deps=
   unsorted=
-  for i in $profile_d/{*/,}*.bashrc; do
+  for i in $PROFILE_D/{*/,}*.bashrc; do
     dep=$(sed -n 's/^##*[      ]*profile-required:[    ]*//p' "$i")
-    i="${i##$profile_d/}"
+    i="${i##$PROFILE_D/}"
     if [ -n "$dep" ]; then
       for d in $dep; do
         deps="$deps
@@ -65,9 +76,9 @@ $deps"
   # Source them all in the right order.
   sourced=
   for i in $deps; do
-    for j in $profile_d/{,*/}$i; do
+    for j in $PROFILE_D/{,*/}$i; do
       [ -e "$j" ] || continue
-      k="${j##$profile_d/}"
+      k="${j##$PROFILE_D/}"
       [ "${sourced/ $k /}" = "$sourced" ] || continue
       . "$j"
       sourced="$sourced $k "
@@ -83,7 +94,7 @@ $deps"
   # Reset LC_ALL.
   LC_ALL=$lc_all
 
-  unset i j k d n dep deps profile_d path required unsorted sourced
+  unset i j k d n dep deps path required unsorted sourced
   unset lc_all nullglob nocg
 
   # Don't inherit failure from the last script.