#!/bin/bash # do not add code here for non-interative login shell # rather put additional non-interactive profile script code in files in /etc/profile.d # this files is sourced for all login shells and also interactive non-login shells via /etc/bash.bashrc # more info see http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html # interactive non-login and login shells will call the BASH_SHELL_LOAD script below # non-interative login shells only source /etc/profile.d # in profile.d is 03-startup.sh which will call # any of the scripts in a repo's startup subdirectory # non-interactive non-login shells are not handled here only via /etc/bash.bashrc # interactive login ([ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]) && export SSH_SESSION=true [[ $- == *i* ]] && export SHELL_INTERACTIVE=true shopt -q login_shell && export SHELL_LOGIN=true [ $EUID -eq 0 ] && export USER_ROOT=true # uncomment for debugging non-interactive login shell, i.e. $ . /etc/profile #unset SHELL_INTERACTIVE #uncomment these for debugging. # echo ---- sourcing system /etc/profile --- # [[ $USER_ROOT ]] && echo 'Root User' || echo 'Non Root User' # [[ $SHELL_INTERACTIVE ]] && echo 'Interactive' || echo 'Not interactive' # [[ $SHELL_LOGIN ]] && echo 'Login shell' || echo 'Not login shell' # [[ $SSH_SESSION ]] && echo ssh remote user || echo local user # echo --------------------- # Set the initial path export PATH=/bin:/usr/bin:/usr/local/bin # set directory for base shell repo export BASH_SHELL_BASE=THISWILLCHANGEDBYDEPLOYSCRIPT # now bootstrap by souring the shell repo envinroment source $BASH_SHELL_BASE/shell.env # set $BASH_SAFE_MODE=true in shell.env to disable UCI interactive shell from loading # TODO see if $NO_BASH_SHELL_SSH=true in user or host directory (at the remote machine) # if so don't source the load command below and make just a simple prompt. if [[ $SHELL_INTERACTIVE ]]; then if [[ ! $BASH_SAFE_MODE ]]; then # echo interactive shell loading $BASH_SHELL_LOAD source "$BASH_SHELL_LOAD" else # safe mode # just set a simple prompt instead NORMAL="\[\e[0m\]" RED="\[\e[1;31m\]" GREEN="\[\e[1;32m\]" YELLOW='\e[1;33m' if [[ $EUID == 0 ]] ; then PS1="${YELLOW}SAFE:$RED\u [ $NORMAL\w$RED ]# $NORMAL" else PS1="${YELLOW}SAFE:$GREEN \u [ $NORMAL\w$GREEN ]\$ $NORMAL" fi unset RED GREEN NORMAL YELLOW fi else # this is non-interactive login (e.g. at user machine login) if [[ $EUID -ne 0 ]] && [[ ! $SSH_SESSION ]]; then export LOGIN_LOG=$HOME/logs/login.log mkdir -p $HOME/logs touch $LOGIN_LOG llog () { echo "$@" 2>&1 | tee -a $LOGIN_LOG } export -f llog llog "$(env | grep BASH)" echo "$(date)" > $LOGIN_LOG llog "non-interactive login shell for $USER" if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then llog "sourcing $i" source $i fi done unset i fi fi fi