bunch of updates and fixes
[distro-setup] / .bashrc
diff --git a/.bashrc b/.bashrc
index da70b0726f1ae5221626d84a31562693ce9d3f63..6780da6b0717979d282be522c1cba33a44d02eca 100644 (file)
--- a/.bashrc
+++ b/.bashrc
 # And we don't keep the rest of the code in this file, because even
 # though we return, we already parsed the whole code, and as I develop
 # the code, the parsing can have errors, which can screw up cronjobs
-# etc. To test for an overriding condition, we have a few options. one
-# is to use an environment variable.  env variables sent across ssh are
+# etc.
+#
+# To test for an overriding condition, we have a few options. one is to
+# use an environment variable.  env variables sent across ssh are
 # strictly limited. ssh -t which sets $SSH_TTY, but within a script that
-# won't work because tty allocation will fail.  We could override an
+# won't work because tty allocation will fail. However, I do use -t for
+# strange hosts, so we consider it an indicator. We could override an
 # obscure unused LC_var, like telephone, but I don't want to run into
 # some edge case where that messes things up. we could transfer a file
 # which we could test for, but I can't think of a way to make that
 # and AcceptEnv ssh config vars to allow the environment variable
 # BASH_LOGIN_SHELL to propagate across ssh. This also requires that we
 # wrap ssh in interactive shells, because, once we export the var, it
-# will go into scripts and theres no way to automatically set it.
-
-
-# first conditions show that we are an ssh command without an interactive shell
+# will go into scripts, and we want it to be nondefault there.
+#
+# -c is set whenever a command is passed to ssh
+# -i is set whenever a command is not passed
 if [[ $SSH_CONNECTION ]] \
-       && [[ $- == *c* ]] \
-       && [[ ! $SSH_TTY ]] \
-       && [[ $- != *i* ]] \
-       && [[ $BASH_LOGIN_SHELL != true ]]; then
-    return 0
+     && [[ $- == *c* ]] \
+     && [[ $- != *i* ]] \
+     && { [[ ! $SSH_TTY ]] || [[ $BASH_LOGIN_SHELL == false ]] ; } ; then
+  return 0
 else
+
+  # the distinction between login and non-login shells is lame,
+  # get rid of it. note ssh shells normally its login if a command is passed
+  if ! shopt -q login_shell; then
     if [[ -r /etc/profile ]]; then
-        source /etc/profile
-    fi
-    _x=$(readlink -f ${BASH_SOURCE[0]})
-    _x=${_x%/*}/brc
-    if [[ -r $_x ]]; then
-      # shellcheck source=./brc
-        source $_x
+      source /etc/profile
     fi
+    # note, this is not exactly the same as a login shell, because that
+    # reads ~/.bash_profile or alternative, which usually just sources
+    # this file, and we don't want to do that and cause an infinite
+    # loop.
+  fi
+  _x=$(readlink -f ${BASH_SOURCE[0]})
+  _x=${_x%/*}/brc
+  if [[ -r $_x ]]; then
+    # shellcheck source=./brc
+    source $_x
+  fi
+  # brc2 is for things i dont necessarily want on every system
+  _x=${_x%/*}/brc2
+  if [[ -r $_x ]]; then
+    # shellcheck source=./brc2
+    source $_x
+  fi
 fi
 # ensure no bad programs appending to this file will have an affect
 return 0