X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=.bashrc;h=04df859f14367be83d2655d2f12e9aee32c2b820;hb=77917a8fbf2032a8b2634a1b3de0879ec45cf213;hp=097dd9859413d0f9c5640e12908726d579bfdd29;hpb=90bd397922e7240c41377e7404f79f190bfbc9d8;p=distro-setup diff --git a/.bashrc b/.bashrc index 097dd98..04df859 100644 --- a/.bashrc +++ b/.bashrc @@ -1,16 +1,6 @@ -# 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 @@ -19,48 +9,74 @@ #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 0 + && [[ $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