.bashrc -- Shebang or Not Shebang?

OK. I’m an idiot. I deleted most of the contents of my .bashrc file. When I realized what I’d done, I said:

“not a problem – I’ll just look for a cool custom version online and plop it in there.”

I found something that looks interesting:

I’ll probably not use 90% of that, but I’m scratching my head over the first line:


That’s the shebang telling the system where the bash program to use is (I think). But, why is it there?

The reason I’m asking is it looks like the system noticed I messed up my .bashrc and prepended the contents of /etc/skel/.bashrc to it:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc

# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
export PATH

# Uncomment the following line if you don't like systemctl's auto-paging feature:

# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"

unset rc

But, that doesn’t have any such shebang. Do I need that shebang or not?

I dunno, probably that person doesn’t understand what a shebang is. There’s no need for one in .bashrc as it is not a script that is run by itself, but a script that is sourced when bash initializes.

Is there some easy way to see what colors he’s setting in these export commands? Parsing those numbers manually gets a bit old.

# To have colors for ls and all grep commands such as grep, egrep and zgrep
export CLICOLOR=1
export LS_COLORS='no=00:fi=00:di=00;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:*.xml=00;31:'
#export GREP_OPTIONS='--color=auto' #deprecated
alias grep="/usr/bin/grep $GREP_OPTIONS"

# Color for manpages in less makes manpages a little easier to read
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

It’s too difficult for me to parse those LS_COLORS values, so I threw in the towel and doubled-down on them with:

So, far, those colors are more readable than whatever I’d had set before.

Just copy and paste the code below in a executable file and run it:

# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The FXXX YXX WXXX
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/xx/COPYING for more details.
for fgbg in 38 48 ; do # Foreground / Background
    for color in {0..255} ; do # Colors
        # Display the color
        printf "\e[${fgbg};5;%sm  %3s  \e[0m" $color $color
        # Display 6 colors per lines
        if [ $((($color + 1) % 6)) == 4 ] ; then
            echo # New line
    echo # New line
exit 0