Inhaltsverzeichnis
Bash
Umleiten der Ausgabe
stdout → Datei
programm > datei.txt
stderr → Datei
programm 2> datei.txt
stdout und stderr → Datei
programm &> datei.txt
Erweiterung von Dateiname entfernen
# name without extension name=${filename%\.*}
Bulk-Rename
Um mehrere Dateien auf einmal umzubenennen (zum Beispiel ap2 in allen Dateien durch ap3 zu ersetzen):
for file in ap2* ; do mv $file `echo $file | sed 's/ap2/ap3/'`; done
Um die Umbenennung vorher gefahrlos zu testen, kann man ein echo einfügen:
for file in ap2* ; do echo mv $file `echo $file | sed 's/ap2/ap3/'`; done
Verzeichnis, aus dem Script gestartet wurde
DIR="$( cd "$( dirname "$0" )" && pwd )"
Gezieltes Blättern in der History
Um gezieltes Blättern oder Suchen in der History zu aktiveren, muss in /etc/inputrc
# search the history with arrow-up and arrow-down "\e[A": history-search-backward "\e[B": history-search-forward
eingefügt werden. Dann kann man den Anfang eines schon mal eingegebenen Befehls eingeben und mit Pfeil-Hoch und -Runter den gewünschten aussuchen.
Wenn dies nur für einen einzelnen Benutzer aktiviert werden soll, werden die Befehle in ~/.inputrc
geschrieben. Um die Einstellungen aus /etc/inputrc
trotzdem zu laden, muss die Datei ~/.inputrc
mit $include /etc/inputrc
beginnen.
Aliases
In der ~/.bash_aliases
können Aliases für Befehle definiert werden um schneller auf sie zugreifen zu können.
Beispiel:
alias ls='ls --color=auto'
Mit type BEFEHL
wird angezeigt, was sich hinter dem Alias BEFEHL
verbirgt.
Beispiel:
$ type ls ls is aliased to `ls --color=auto'
Um den Befehl ohne den Alias auszuführen, gibt es mehrere Möglichkeiten:
- Backslash:
\ls
- command:
command ls
- Voller Pfad:
/bin/ls
- Anführungszeichen:
"ls"
oder'ls'
Nützliche Aliases
alias diff='colordiff' #use colored diff alias less='less -R' #make less work with colordiff alias ls='ls --color=auto' #use colors for ls alias ll='ls -al' #show long ls format
up-Funktion zum schnellen Verzeichniswechel:
# Go up directory tree X number of directories function up() { COUNTER="$@"; # default $COUNTER to 1 if it isn't already set if [[ -z $COUNTER ]]; then COUNTER=1 fi # make sure $COUNTER is a number if [ $COUNTER -eq $COUNTER 2> /dev/null ]; then nwd=`pwd` # Set new working directory (nwd) to current directory # Loop $nwd up directory tree one at a time until [[ $COUNTER -lt 1 ]]; do nwd=`dirname $nwd` let COUNTER-=1 done cd $nwd # change directories to the new working directory else # print usage and return error echo "usage: up [NUMBER]" return 1 fi }
Farbige Ausgabe
Mit Escapesequenzen für das VT100-Terminal kann die Ausgabe eingefärbt werden. Wichtig ist dabei das -e, sonst werden Escapesequenzen nicht als solche ausgewertet.
red='\e[0;31m' NC='\e[0m' # No Color echo -e "${red}Hello${NC}"
Folgende Farbcodes können verwendet werden:
Farbe | Code | Farbe | Code |
---|---|---|---|
Black | 0;30 | Dark Gray | 1;30 |
Blue | 0;34 | Light Blue | 1;34 |
Green | 0;32 | Light Green | 1;32 |
Cyan | 0;36 | Light Cyan | 1;36 |
Red | 0;31 | Light Red | 1;31 |
Purple | 0;35 | Light Purple | 1;35 |
Brown/Orange | 0;33 | Yellow | 1;33 |
Light Gray | 0;37 | White | 1;37 |
weitere Informationen zu Kompatibilität, Blinken und mehr Farben
Debugging
Um Bash-Skripte zu debuggen, können sie mit -x
aufgerufen werden:
bash -x ./script.sh
oder im Skript
set -x
gesetzt werden.
Für weitere Logging- und Debugmöglichkeiten siehe hier.