# 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. # to debug #set -x # redirect output to log file. this doesn't work. todo figure out why #exec 1>>/a/tmp/bashlog #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 # first conditions show that we are an ssh command without an interactive shell if [[ $SSH_CONNECTION ]] \ && [[ $- == *c* ]] \ && [[ ! $SSH_TTY ]] \ && [[ $- != *i* ]] \ && [[ ! $BASH_LOGIN_SHELL == true ]]; then return 0 else if [[ -r /etc/profile ]]; then source /etc/profile fi _x=$(readlink -f $BASH_SOURCE) _x=${_x%/*}/brc if [[ -r $_x ]]; then source $_x fi fi # ensure no bad programs appending to this file will have an affect return 0