-# Copyright (C) 2016 Ian Kelling
-
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
+#!/bin/bash
+# Copyright (C) 2019 Ian Kelling
+# SPDX-License-Identifier: AGPL-3.0-or-later
# to debug
#set -x
# 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
# inherently limited to a single ssh command. I choose to set SendEnv
# and AcceptEnv ssh config vars to allow the environment variable
-# BASH_LOGIN_SHELL to propagate across ssh.
-
-# assume we want ssh commands to source this file if we are sourcing it,
-# and we haven't specified otherwise already
-[[ ! $BASH_LOGIN_SHELL ]] && export BASH_LOGIN_SHELL=true
-#BASH_LOGIN_SHELL=false # temporary override
-
-# first conditions show that we are an ssh command without an interactive shell
+# 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 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
+ source /etc/profile
fi
- _x=$(readlink -f $BASH_SOURCE)
- _x=${_x%/*}/brc
- if [[ -r $_x ]]; then
- source $_x
+ # 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
+ _tmp=$(readlink -f ${BASH_SOURCE[0]})
+ _tmp=${_tmp%/*}
+ _tmp2=$_tmp/brc
+ if [[ -s $_tmp2 ]]; then
+ # shellcheck source=./brc
+ source $_tmp2
+ fi
+ # brc2 is for things i dont necessarily want on every system
+ _tmp2=$_tmp/brc2
+ if [[ -s $_tmp2 ]]; then
+ # shellcheck source=./brc2
+ source $_tmp2
+ else
+ # This check is for when running the sl() command,
+ # and the remote host got its type misidentified.
+ _tmp2=$_tmp/../brc2
+ if [[ -s $_tmp2 ]]; then
+ # shellcheck source=./brc2
+ source $_tmp2
fi
+ fi
fi
# ensure no bad programs appending to this file will have an affect
return 0