Add some less options.
[profile.git] / .bash_profile
index 56a1eb0..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,10 +76,14 @@ $deps"
   # Source them all in the right order.
   sourced=
   for i in $deps; do
-    [ -e "$profile_d/$i" ] || continue
-    [ "${sourced/ $i /}" = "$sourced" ] || continue
-    . "$profile_d/$i"
-    sourced="$sourced $i "
+    for j in $PROFILE_D/{,*/}$i; do
+      [ -e "$j" ] || continue
+      k="${j##$PROFILE_D/}"
+      [ "${sourced/ $k /}" = "$sourced" ] || continue
+      . "$j"
+      sourced="$sourced $k "
+      break
+    done
   done
 
   # Maybe turn nocaseglob back on.
@@ -79,7 +94,7 @@ $deps"
   # Reset LC_ALL.
   LC_ALL=$lc_all
 
-  unset i 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.