84 lines
2.9 KiB
Bash
84 lines
2.9 KiB
Bash
#!/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=/shell
|
|
# 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 "$@" >> $LOGIN_LOG 2>&1
|
|
}
|
|
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
|