.bashrc not run on login
11,395
Do you have .profile
or a .bash_profile
?
When BASH is invoked as a login shell, the following scripts are executed:
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
I have the following in my ~/.profile
to invoke .bashrc
:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Related videos on Youtube
![stefgosselin](https://i.stack.imgur.com/AFhLN.jpg?s=256&g=1)
Author by
stefgosselin
I am a french Canadian PHP developper, interested in anything related to Open-Source Web developpment.
Updated on September 18, 2022Comments
-
stefgosselin almost 2 years
I have been playing with colorized prompts, set in
.bashrc
.The problem is I always need to source the
.bashrc
after logging in. When I log in, I can see the file is sourced (I tried adding anecho "SOURCED"
at top of the file.Yet when I login, the commands for colored prompts never run, although re-sourcing
.bashrc
works - colors are set aftersource ~/.bashrc
, I am curious as to the nature of this behavior.# ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac # don't put duplicate lines or lines starting with space in the history. # See bash(1) for more options HISTCONTROL=ignoreboth # append to the history file, don't overwrite it shopt -s histappend # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTFILESIZE=1000000 HISTSIZE=1000000 # Ignore commands that start with a space, and duplicates HISTCONTROL=ignoreboth # Ignore certain commands HISTIGNORE='ls:bg:fg:history' # Timestamp commands HISTTIMEFORMAT='%F %T ' # One commands per line shopt -s cmdhist # Save commands to history immediately PROMPT_COMMAND='history -a' # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. shopt -s checkwinsize # If set, the pattern "**" used in a pathname expansion context will # match all files and zero or more directories and subdirectories. #shopt -s globstar # make less more friendly for non-text input files, see lesspipe(1) [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" # set variable identifying the chroot you work in (used in the prompt below) if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then debian_chroot=$(cat /etc/debian_chroot) fi # set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color) color_prompt=yes;; esac # uncomment for a colored prompt, if the terminal has the capability; turned # off by default to not distract the user: the focus in a terminal window # should be on the output of commands, not on the prompt force_color_prompt=yes if [ -n "$force_color_prompt" ]; then if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then # We have color support; assume it's compliant with Ecma-48 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such # a case would tend to support setf rather than setaf.) color_prompt=yes else color_prompt= fi fi if [ "$color_prompt" = yes ]; then PS1=`echo -ne "$HOST_COLOR\H\[\033[00m\]\[\e[$COLON_COLOR\]:\[\033[01;32m\]\w\[\033[00m\]\\[\033[01;33m\]\$\[\033[00m\] "` # PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi unset color_prompt force_color_prompt # If this is an xterm set the title to user@host:dir case "$TERM" in xterm*|rxvt*) PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;; *) ;; esac # enable color support of ls and also add handy aliases if [ -x /usr/bin/dircolors ]; then test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" alias ls='ls --color=auto' #alias dir='dir --color=auto' #alias vdir='vdir --color=auto' alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' fi # some more ls aliases alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' # Add an "alert" alias for long running commands. Use like so: # sleep 10; alert alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' # Alias definitions. # You may want to put all your additions into a separate file like # ~/.bash_aliases, instead of adding them here directly. # See /usr/share/doc/bash-doc/examples in the bash-doc package. if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi # enable programmable completion features (you don't need to enable # this, if it's already enabled in /etc/bash.bashrc and /etc/profile # sources /etc/bash.bashrc). if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # Add bin to path PATH="${PATH:+${PATH}:}$HOME/bin" # Color the colon red if root COLON_COLOR='0m' if [ ${UID} -eq 0 ]; then COLON_COLOR='1;31m' fi
-
Eliah Kagan about 6 yearsHow are you logging in? SSH? You said
echo "TEST"
at the top of.bashrc
printsTEST
so it seems.bashrc
is being sourced. What happens if you instead put it just below theesac
line? This will check for the (admittedly small) possibility that your login shell is somehow noninteractive (which could happen if you're logging in with some unusual method). Please edit with this information and also the contents of all of~/.profile
,~/.bash_profile
, and~/.bash_login
that exist. Thanks!
-
-
stefgosselin about 6 yearsYes, indeed I do. I think it is sourced at login, because setting
echo "TEST"
at top of .bashrc get printed out when I log in. -
Martin W about 6 yearsI don't see that echo "TEST" in the source above. Just out of curiosity, is that before or after the interactive test?