Bash .bashrc¶
Ich werde mich auf die benutzerspezifische Konfigurationsdatei für die Bash (Bourne again Shell) konzentrieren.
Die genaue Abfolge - und das Vorhandensein - diverser Konfigurationsdateien und Mechanismen kann bei Distros abweichen und ist nicht immer gleich.
Für die Systemkonfiguration sind diverse weitere Konfigurationsdateien in /etc
zu finden:
/etc/profile
- systemweite Konfiguration von Shells wie Bash, Korn-Shell oder Ur-ahn Sh/etc/profile.d/
- spezifische Zusatzskripte; z.B.bash-completion.sh
(Ubuntu/s, Mint)/etc/bash.bashrc
- systemweite Bash-Konfiguration (alle Benutzer)
Die Benutzer verfügen über:
$HOME/.profile
- wieder für mehrere Shell nach Sh-Technik: sh, ksh, bash, zsh, …$HOME/.bashrc
- persönliche Bash-Konfiguration (alternativ bei zsh:$HOME/.zshrc
)
Eine Basisversion der .bashrc
ist bei den Distros jeweils im Skelett für neue Benutzer zu finden: /etc/skel/.bashrc
.
Ich lagere meine eigenen Bash-Extras gerne in einer Zusatzdatei aus, die ich dann einfach am Ende der Standard-.bashrc
einfügen lasse:
###########################################################
# MY-STUFF - please consider the software in need:
# for powerline-go: go and git (see software baseinstalls)
###########################################################
if [ -e $HOME/.bashrc_JB_MY-STUFF ]; then
source $HOME/.bashrc_JB_MY-STUFF
echo 'Extras for .bashrc loadad with .bashrc_JB_MY-STUFF'
fi
Für eine beispielhafte Ergänzung der Standard-.bashrc
hier MY-STUFF-Version als Beispiel:
# .bashrc_JB_MY-STUFF - extra stuff expanding the standard .bashrc
# ================================================================
# my own pager with most: sudo apt install most
# or manual color stuff for less and man-pages
if [ -x "$(command -v most)" ]
then
export PAGER=most
else
# Tipp mit Farbe für less:
# https://www.linux-community.de/blog/bunte-manpages-anzeigen-mit-most-und-less/
export LESS_TERMCAP_mb=$(printf "\e[1;31m") # Blinken
export LESS_TERMCAP_md=$(printf "\e[1;31m") # Fett
export LESS_TERMCAP_me=$(printf "\e[0m") # Modus Ende
export LESS_TERMCAP_se=$(printf "\e[0m") # Ende Standout-Modus
export LESS_TERMCAP_so=$(printf "\e[1;44;33m") # Start Standout-Modus (Info-Kasten)
export LESS_TERMCAP_ue=$(printf "\e[0m") # Unterstreichen Ende
export LESS_TERMCAP_us=$(printf "\e[1;32m") # Unterstreichen Anfang
fi
# my own aliases - joebstyle
alias jbdf='df -h | grep ^/dev | grep -v ^/dev/loop'
# sudo apt install fortunes cowsay tty-clock
if [ -x "$(command -v cowsay)" ] && [ -x "$(command -v fortune)" ]; then
# Bit of Fun with cowsay and fortune cookies
alias jbcowsay='while true; do fortune|cowsay -f tux && sleep 20; done'
fi
if [ -x "$(command -v tty-clock)" ]; then
alias jbtty-clock="tty-clock -s -f '%A, %d.%m.%Y'"
fi
# more fun with bat/batcat instead of cat
# sudo apt install bat # ubuntu 20.04: Befehl dann batcat - Manpage auch mit batcat
if [ -x "$(command -v batcat)" ]
then
alias jbcat="PAGER=less;batcat"
fi
# individuelle Wallpaper auf 4 Arbeitsflächen!
if [ -x "$(command -v $HOME/Bilder/wallpaper/wallpaper.sh)" ]; then
alias jbwallpaper="$HOME/Bilder/wallpaper/wallpaper.sh"
fi
# Projektordner mit VSCODIUM aka codium starten
if [ -x "$(command -v codium)" ]; then
alias jbcode="codium . &"
fi
# Passwords mystyle with Tool makepasswd: 15 Characters out of string
if [ -x "$(command -v makepasswd)" ]; then
alias jbmakepasswd="makepasswd --chars 15 --string 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYZ#+-()=}][{;:'"
fi
# ===========================
# Powerline-Go mit golang-go
# ===========================
# in case of problems with https and/or Security stuff:
# git config --global http.sslVerify false
# and:
# go get -u -insecure github.com/justjanne/powerline-go
# Default stuff:
# ==============
# Remember: install the powerline-fonts aka fonts-powerline and the go-stuff
# https://awesomeopensource.com/project/justjanne/powerline-go
# https://github.com/justjanne/powerline-go
# folder ~/go creating with (needs go and git (needs go and git):
# go get -u github.com/justjanne/powerline-go
export GOPATH="$HOME/go"
function _update_ps1() {
PS1="$($GOPATH/bin/powerline-go -error $? -newline -theme default -shell bash -modules-right time)"
}
if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
# Finish up with the terminals
# Colors for the console with solarized dark
# eval $(dircolors -b ~/.bash_dircolors_solarized_dark)
if [ $TERM == "xterm-256color" ] && [ -e ~/.bash_dircolors_solarized_dark ]
then
eval $(dircolors -b ~/.bash_dircolors_solarized_dark)
else [ $TERM = "linux" ] && [ -e ~/.bash_dircolors_solarized_ansi ]
eval $(dircolors -b ~/.bash_dircolors_solarized_ansi)
fi
# nodejs stuff
# ============
if [ -x $HOME/opt/nodejs/bin/node ]; then
export PATH=$HOME/opt/nodejs/bin:$PATH
fi
# use npm gulp tar version of nodejs
if [ -f "/home/joeb/opt/nodejs/bin/gulp" ]; then
alias gulp='/home/joeb/opt/nodejs/bin/gulp'
fi
# Home-Dir bin - if not already set by Distro
# ============
echo $PATH | egrep "$HOME/bin" >> /dev/null
if [ $? -ne 0 ] && [ -d "$HOME/bin" ]; then
export PATH=$HOME/bin:$PATH
fi
# Example for FZF with git
# see: https://github.com/junegunn/fzf/wiki/examples#git
# Attention: Software need to be prepared / installed
# fzf, git, xclip and
# diff-so-fancy (Perl Script: https://github.com/so-fancy/diff-so-fancy
# ============================================================================
alias glNoGraph='git log --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr% C(auto)%an" "$@"'
_gitLogLineToHash="echo {} | grep -o '[a-f0-9]\{7\}' | head -1"
_viewGitLogLine="$_gitLogLineToHash | xargs -I % sh -c 'git show --color=always % | diff-so-fancy'"
# fcoc_preview - checkout git commit with previews
fcoc_preview() {
local commit
commit=$( glNoGraph |
fzf --no-sort --reverse --tiebreak=index --no-multi \
--ansi --preview="$_viewGitLogLine" ) &&
git checkout $(echo "$commit" | sed "s/ .*//")
}
# fshow_preview - git commit browser with previews
fshow_preview() {
glNoGraph |
fzf --no-sort --reverse --tiebreak=index --no-multi \
--ansi --preview="$_viewGitLogLine" \
--header "enter to view, alt-y to copy hash" \
--bind "enter:execute:$_viewGitLogLine | less -R" \
--bind "alt-y:execute:$_gitLogLineToHash | xclip"
}
In diesem Beispiel mal ein paar Aufrufe und Nutzungen in der Bash. Das lässt sich dann gerne einmal weiter Richtung Bash-Skripting erweitern.