-# 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
#exec 2>>/a/tmp/bashlog
-# By default this file is sourced for ALL ssh commands. This is wonky.
-# Normally, this file is not sourced when a script is run, but we can
-# override that by having #!/bin/bash -l. I want something similar for ssh
-# commands. when a local script runs an ssh command, this file should not be
-# sourced by default, but we should be able to override that.
-#
-# So here we test for conditions of a script under ssh and return if so.
-# 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
-# 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
-# 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
+# History related options first, or else
+# we risk screwing up history history. And this is duplicated
+# in ~/.bash_profile just for good measure
+# history number. History expansion is good.
+PS4='$LINENO+ '
+# history file size limit, set to unlimited.
+# this needs to be different from the default because
+# default HISTFILESIZE is 500 and could clobber our history
+HISTFILESIZE=
+# max commands 1 session can append/read from history
+HISTSIZE=1000000
+# the time format display when doing the history command
+# also, setting this makes the history file record time
+# of each command as seconds from the epoch
+HISTTIMEFORMAT="%Y-%m-%d %I:%M %p "
+# consecutive duplicate lines dont go in history
+HISTCONTROL=ignoredups
+# works in addition to HISTCONTROL to do more flexible things
+# it could also do the same things as HISTCONTROL and thus replace it,
+# but meh. dunno why, but just " *" does glob expansion, so use [ ] to avoid it.
+HISTIGNORE='pass *:[ ]*:otp *:oathtool *'
+
-# first conditions show that we are an ssh command without an interactive shell
+# see comments in brc2 sl() function for background.
if [[ $SSH_CONNECTION ]] \
- && [[ $- == *c* ]] \
- && [[ ! $SSH_TTY ]] \
- && [[ $- != *i* ]] \
- && [[ ! $BASH_LOGIN_SHELL == true ]]; then
- return
+ && [[ $BRC != t ]]; then
+ brc() {
+ export BRC=t
+ source ~/.bashrc
+ }
+ 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