the shipped redhat(7.x) arrangement of bashrc's & profile's is confusing and incorrectly documented. i evolved to this solution:
discard /etc/skel/.bash_profile before creating any users replace /etc/profile and /etc/bashrc i leave /etc/skel/.bashrc in place. it contains merely an invocation of /etc/bashrc similarly, my replacement /etc/profile merely contains an invocation of ~/.bashrc for login shells, bash itself only invokes /etc/profile for non login shells, bash itself only invokes ~/.bashrc hence, in my setup, we get to /etc/bashrc in either case. the simplicity of this avoids much confusion about which shell invocations are like logins and which aren't. and i see no practical concern about putting environment and function declarations all together. otoh functions which in turn invoke aliases only work properly when the file that defines them is conditionally invoked, not invoked if the shell is not an interactive shell. so, in my setup, all my stuff is actually in /etc/bashrc+, which /etc/bashrc only invokes in interactive shells. my actual files are included below. Timothy Stone wrote: > While I'm not a newbie with Linux (mostly abuse Apache and Java on my box) I take a >lot of things for granted. One is how BASH works. It works most of the time. > > In fact I'm a TCSH convert to BASH. In RHL 7.3 BASH is the default shell, hence my >conversion. But let me ask about the ~/.bash_profile, ~/.bash_login, etc. files. >They don't seem to work. > > I have looked up all the documentation. The man pages state that ~/.bash_profile is >read in turn with /etc/bashrc and ~/.bashrc but the ~/.bash_profile is disabled or >just not being read. I have CLASSPATH settings for my shell in this file and have to >manually source it with each new shell I use. Annoying. > > Is there something I'm missing here? Something that needs to be turned on? I saw a >reference to BASH_PROFILE="TRUE" on one site but that didn't do the trick. > > Any help is greatly appreciated. > > Thanks, > Tim > /** > * Timothy Stone . Sun Certified Java Programmer > * Web Master . tstone at cityofhbg dot com > * City of Harrisburg . 717.255.7297 > * Pennsylvania USA . 717.903.9162 > * > * "This Satan's drink [coffee] is so delicious, > * we shall cheat Satan and baptize it." > * --Pope Clement VIII > */ ==> /etc/profile <== # /etc/profile, only invoked for login shells, not by sulogin nor rsh nor su nor by subshell invocations. # we simply call ~/.bashrc, bash calls there itself for non-login shells. # put environment stuff in your .bashrc, that way changes are realized by merely starting a new bash. [ $rctrace ]&&echo entering /etc/profile . ~/.bashrc [ $rctrace ]&&echo completed /etc/profile ==> /etc/bashrc <== # /etc/bashrc, invoked via user ~/.bashrc [ $rctrace ]&&echo entering /etc/bashrc if [[ "$-" = *i* ]];then # are we an interactive shell? for i in /etc/profile.d/*.sh;do [ $rctrace ]&&echo $i next [ -r "$i" ]&&. "$i" [ $rctrace ]&&echo $i done done;unset i [ $rctrace ]&&echo /etc/X11/xinit/xinitrc.d/g next . /etc/X11/xinit/xinitrc.d/g [ $rctrace ]&&echo /etc/X11/xinit/xinitrc.d/g done [ $rctrace ]&&echo /etc/bashrc+ next . /etc/bashrc+ [ $rctrace ]&&echo /etc/bashrc+ done fi #functions using aliases only work if defined in files sourced only inside the above conditional [ $rctrace ]&&echo completed /etc/bashrc ==> /etc/bashrc+ <== # /etc/bashrc+, invoked via /etc/bashrc ulimit -S -c 0 [ "$UID" = 0 ]&&umask 22||umask 2 alias funct=function funct pathpref(){ echo :$PATH:|/bin/grep -q ":$*:"||export PATH="$*:$PATH";} funct pathpost(){ echo :$PATH:|/bin/grep -q ":$*:"||export PATH="$PATH:$*";} funct manpost(){ echo :$MANPATH:|/bin/grep -q ":$*:"||export MANPATH="$MANPATH:$*";} Opath="$PATH" pathpref /usr/bin pathpref /usr/sbin pathpref /bin pathpref /sbin pathpost /usr/local/bin #pathpost /u/netatalk/bin pathpost /usr/X11R6/bin pathpost /usr/local/sbin manpost /usr/local/man #manpost /u/netatalk/man [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]&&export INPUTRC=/etc/inputrc export TAPE=/dev/tape export VERSION_CONTROL=numbered export LESS='-i -R -z-3 --shift 20 -s -S -M -c' alias so='((shopt;set -o)|sort)2>&1|t' set -o notify set -o noclobber shopt -s histappend histverify histreedit dotglob nocaseglob extglob checkwinsize mailwarn HISTSIZE=499 HISTFILESIZE=4499 HISTCONTROL=ignoredups HISTIGNORE=j:f:-:h:l:L:ll:LL:lt:llt FIGNORE='.TBL:~' complete -d . alias barc='source /etc/bashrc+' alias scr='tty= screen -O -D -RR' alias xfsstart='[ -f /var/lock/subsys/xfs ]||service xfs start' alias vk-='xfsstart&&wm=$KDEDIR/bin/startkde vncserver -cc 3 -name kde -geometry 640x650' alias vk='xfsstart&&wm=$KDEDIR/bin/startkde vncserver -cc 3 -name kde -geometry 800x600' alias vg='xfsstart&&wm=gnome-session vncserver -name gnome -geometry 800x600' alias xg='xfsstart&&xini xg /usr/bin/gnome-session' alias xk='xfsstart&&xini xk $KDEDIR/bin/startkde' funct xini(){ (for((x=0;x<=9;x++));do [ -e /tmp/.X$x-lock ]||break;done;rm -f /var/log/xx/$1:$x && xinit $2 -- :$x > /var/log/xx/$1:$x 2>&1 &);} alias t=less funct h(){ [ "$@" ]&&history "$@"||history 2>&1|t;} alias j=jobs alias b=bg alias f=fg funct r(){ %?"$*";} alias pg='pgrep -f' alias pk='pkill -f' alias pk9='pkill -9 -f' alias md=mkdir alias mb='mv -bv' alias ca='cp -ubav --sparse=always' alias cf='cp -bav --sparse=always' alias cx='cp -xa --sparse=always' funct car(){ ca $2 $1;} funct tarcopy(){ tar -cpSf - "$1"|tar -xpSf - -C "$2";} #tar -cpSO --atime-preserve -C /source .|tar -xpSB --same-owner -C /target funct tarx(){ tar -xpSf "$@";} funct tarxj(){ tar -xjpSf "$@";} funct tarxz(){ tar -xzpSf "$@";} funct link(){ ln -sbv $2 $1;} funct -~(){ #assignment from $1 drops \001 character, assign from $a instead a=${a%%*(/)};[ ${a:0:1} = / ]||a=$(/bin/pwd)/$a d=${a%/*} a=${a##*/} if cd "${d:-/}";then fs=$(df .);fs=${fs##*% };b=$(/bin/pwd)/$a b=${b##$fs*(/)} b=$fs/$1/${b//\//\(} n=$(($(ls -U1Nad "$b"~+([0-9]) 2>/dev/null|(echo -1;while read -r f do echo ${f##*~};done)|sort -nr|head -n1)+1)) md -pm777 "$fs/$1";else false;fi;} #- (with no args) same as %- #- files tosses files into dumpster, moving aside anything of same name already in dumpster funct -(){ if [ ! "$1" ];then %-;else (for a;do (-~ - &&( [ -e "$b" -o -L "$b" ]&&( mb -- "$b"{,~$n}) mb -- "$a" "$b"));done);fi;} funct cb(){ a=$1;(-~ \~ && ca -- "$a" "$b"~$n);} alias fixkonqtoolbar='- $KDEHOME/share/config/konq_history' alias .=Cd funct Cd(){ if [ "$*" == "" ];then cd;else cd "$*";fi;Nwd;Nld ldi;NLD;} funct Nwd(){ export CWD=$PWD;} funct Nld(){ if [ "$CWD" != "${ldirs[$*]}" ];then ldir="${ldirs[$*]}";fi;} funct NLD(){ if [ "$CWD" != "${ldirs[0]}" ];then ldirs=("$CWD" "${ldirs[@]}");fi;ldi=0;} alias ,='((ldi+=(ldi<${#ldirs[*]}-1)));cd "${ldirs[ldi]}";Nwd;Nld 0' alias ,,='((ldi-=(ldi>0 )));cd "${ldirs[ldi]}";Nwd' alias ,0=' cd "${ldirs[ 0 ]}";Nwd;Nld ldi' alias ,.=' cd "${ldirs[ldi]}";Nwd;Nld 0' funct ..(){ Cd "$(dirname "$(/bin/pwd)")/$*";} funct ...(){ Cd "$(dirname "$PWD" )/$*";} alias cwd='echo pwd=$(pwd) /bin/pwd=$(/bin/pwd)' alias listsort='sort -fs -k1.1,1.1' #listsort separates directories from files alias La=' ls -alqF --full-time --color' alias la=' La -v' alias La.=' La -d' alias la.=' la -d' funct lla(){ la "$@" 2>&1|t;} funct LLa(){ La "$@" 2>&1|t;} funct l (){ la "$@"|listsort ;} #l sorts case distinct via ls -v funct L (){ La "$@"|listsort ;} #L sorts case intermixed via g locale funct ll (){ la "$@"|listsort 2>&1|t;} funct LL (){ La "$@"|listsort 2>&1|t;} funct l.(){ la. "$@"|listsort ;} funct L.(){ La. "$@"|listsort ;} funct ll.(){ la. "$@"|listsort 2>&1|t;} funct LL.(){ La. "$@"|listsort 2>&1|t;} alias lt=' la -tr' funct llt(){ la -tr "$@" 2>&1|t;} alias lt.=' la. -tr' funct llt.(){ la. -tr "$@" 2>&1|t;} alias ifsn="IFS=$'\n'" funct finl(){ (ifsn;Lt "$@" $(find -type f))2>&1|t;} alias listrunlevels='(La -d /etc/rc*.d/*|sort -f -k9.16 -k9)2>&1|t' alias listconfig='(chkconfig --list|sort -fb -k2)2>&1|t' alias listpkgs='rpm -qa|sort 2>&1|t' alias psh='pshp|pshq 2>&1|t' alias pshp='ps -eHo tty8,sess,tpgid,pgrp,ppid,pid,start,wchan,stat,args --cols 999' funct pshq(){ (i=0;while read -r ps[i];do i=$((i+1));done;a=(1) for((j=0;j<i;j=j+1));do pj=(${ps[j]}) #group together processes with same pgrp if [ "${pj[4]}" = 1 ];then for((k=j;k<i;k=k+1));do pk=(${ps[k]}) if [ "${pk[4]}" = 1 ];then b=(${pk[@]}) fi if [[ "$pk" && "${b[3]}" = "${a[3]}" ]];then echo "$(printf 'k%.3d' $k) ${ps[k]}" ps[k]= fi done;pj=(${ps[j]}) fi [ "${pj[4]}" = 1 ]&&a=(${pj[@]}) [ "$pj" ]&&echo "$(printf 'j%.3d' $j) ${ps[j]}" done);} alias dfh='df -hT' alias dfm='df -mT' alias duff='diff -ubB' alias grip='grep -i' #findgrep "args to find in quotes" then args to egrep not in quotes #findgrep: use -noleaf on dos filesystems funct findgrep(){ find $1 -mount -type d \( -path /var -o -path /dev -o -path /tmp -o -path /home -o -path /root \) -prune -o -type f -print0|xargs -r -0 egrep -i "${@:2}";} #unct findgrep(){ find ... -exec grep -i "$@" '{}' \;;} alias showfetched='(cd /var/log;egrep "messages? for" $(ls -tr maillog*))2>&1|t' funct st(){ (echo Return-Path: [EMAIL PROTECTED];echo Errors-To: [EMAIL PROTECTED];echo Subject: $@;echo To: $@;echo;echo just a test)|sendmail -t;} funct mailnote(){ (echo Return-Path: [EMAIL PROTECTED];echo Errors-To: [EMAIL PROTECTED];echo Subject: $@;echo To: $LOGNAME )|sendmail -t;} alias pow='um&&poweroff' alias boo='um&&reboot' alias um='.&&umount -atnfs,smbfs' funct user(){ #adduser wrapper adduser -Gstaff $1 && chmod 711 /home/$1 && md -p /v/h/samba/public/$1 && chown $1.staff /v/h/samba/public/$1 && link /home/$1/public ../../samba/public/$1 && smbpasswd -a $1 && passwd $1 } funct userren(){ #change username mb /home/$1 /home/$2 && mb /samba/public/$1 /samba/public/$2 && groupmod -n $2 $1 && usermod -d /home/$2 -l $2 $1 && sed -e "s|^$1:|$2:|" /etc/samba/smbpasswd >/etc/samba/smbpasswd%~ && cp -av /etc/samba/smbpasswd%~ >/etc/samba/smbpasswd } function useR(){ useradd -u0 -o -g$1 -d/home/$1/$2 $2&&passwd $2;} # useR patty pattY #these are for comparing and merging into a new version funct x(){ lt. /b1/~/*${1##*/}@0 /~/*${1##*/}@152;duff /b1/~/*${1##*/}@0 /~/*${1##*/}@152;} funct x1(){ lt. /b1/~/*${1##*/}{@0,} ;duff /b1/~/*${1##*/}{@0,} ;} funct x2(){ lt. /b1/~/*${1##*/}@0 $1 ;duff /b1/~/*${1##*/}@0 $1 ;} funct x3(){ lt. /~/*${1##*/}@152 $1 ;duff /~/*${1##*/}@152 $1 ;} funct xt(){ { lt. /b1/~/*${1##*/}@0 /~/*${1##*/}@152;duff /b1/~/*${1##*/}@0 /~/*${1##*/}@152;} 2>&1|t;} funct x1t(){ { lt. /b1/~/*${1##*/}{@0,} ;duff /b1/~/*${1##*/}{@0,} ;} 2>&1|t;} funct x2t(){ { lt. /b1/~/*${1##*/}@0 $1 ;duff /b1/~/*${1##*/}@0 $1 ;} 2>&1|t;} funct x3t(){ { lt. /~/*${1##*/}@152 $1 ;duff /~/*${1##*/}@152 $1 ;} 2>&1|t;} funct v(){ vim /b1/~/*${1##*/}@0 /b1/~/*${1##*/} $1 /~/*${1##*/}@152;} ttywas="$tty";export tty=$(tty|cut -c 6-);[ "$shlv" == "" ]&&export shlv=-10 if [ "$shlid" != "$$" ];then shlid=$$ ldirs=($PWD) ldi=0 PROMPT_COMMAND='history -s "($HISTFILE $(date "+%x %a %X" -r$HISTFILE 2>/dev/null||true)) $(date "+%x %a %X") $DISPLAY $WINDOW $tty $shlv";unset PROMPT_COMMAND' if [ "$tty" != "$ttywas" ];then shlv=0;else ((shlv+=1));fi fi #COLOR_GREEN="\033[1;32m" #COLOR_RED="\033[1;31m" #COLOR_YELLOW="\033[1;33m" #COLOR_NORMAL="\033[0;39m" # ps='\$' #if [ "$(id -u)" = "0" ];then # PS="${COLOR_RED}"'\$'"${COLOR_NORMAL}" #else # PS="${COLOR_GREEN}"'\$'"${COLOR_NORMAL}" #fi #PS1=" $ps " #PS1=" $PS\h$PS$tty$PS$shlv$PS\u " #PS1=" $PS\h " [ "$UID" = 0 ]&&PS1='#'||PS1='_';PS1=" $PS1$WINDOW$PS1$shlv$PS1$LOGNAME@\h$PS1${DISPLAY:-$tty}$PS1\w$PS1 " -- redhat-list mailing list unsubscribe mailto:redhat-list-request@;redhat.com?subject=unsubscribe https://listman.redhat.com/mailman/listinfo/redhat-list