*``$0``: Gibt normalerweise den Namen des ausgeführten Programms zurück, kann aber auch auf einen anderen Wert gesetzt werden. Daher kein eigentlicher positionaler Parameter.
*``$FUNCNAME``: Name der Funktion
@@ -11,78 +15,91 @@ Positionale Parameter
*``$#``: Die Anzahl Argumente, ``$0`` nicht mitgezählt
| < | cat < testfile | Standardeingabe wird umgestellt (im Beispiel auf die Datei testfile) |
| > oder 1> | echo "Hello world!" > testfile | Standardausgabe wird umgestellt (im Beispiel auf die Datei testfile) [gleichbedeutend mit 1>] |
| >> | echo "Hello world!" >> testfile | Standardausgabe wird an Datei angehängt (im Beispiel auf testfile) |
| 2> | ls -l /dev/null/void 2> testfile | Standardfehlerausgabe wird umgestellt (im Beispiel auf die Datei testfile) |
| &> | ls $HOME /dev/null/void &> testfile | Standardausgabe und Standardfehlerausgabe werden in gleiche Ausgabe umgeleitet (im Beispiel auf die Datei testfile) |
| >&1 | ls -l /dev/null/void >&1 | Strom wird auf Standardausgabe umgeleitet |
| >&2 | echo "Hello world!" >&2 | Strom wird auf Standardfehlerausgabe umgeleitet |
| exec 1> | exec 1> testfile | Standardausgabe wird, bspw. in Skript oder in geöffneter, permanent umgestellt (im Beispiel auf die Datei testfile) |
| exec 0< | exec 0< testfile | Standardeingabe wird umgestellt (im Beispiel auf die Datei testfile) |
| exec 3<> | exec 3<> testfile | Für Datenstrom Ziel sowohl als Ein- wie Ausgabe definieren (im Beispiel Ziel testfile) |
| >&- | exec 3>&- | Datenstrom schliessen (im Beispiel für Datenstrom 3) |
| tee | date \| tee testfile | Standardeingabe wird gleichzeitig nach Standardausgabe und einer weiteren Ausgabe weitergeleitet (im Beispiel testfile) |
| `<` | `cat < testfile` | Standardeingabe wird umgestellt (im Beispiel auf die Datei `testfile`) |
| `> oder 1>` | `echo "Hello world!" > testfile` | Standardausgabe wird umgestellt (im Beispiel auf die Datei `testfile`) [gleichbedeutend mit `1>`] |
| `>>` | `echo "Hello world!" >> testfile` | Standardausgabe wird an Datei angehängt (im Beispiel auf `testfile`) |
| `2>` | `ls -l /dev/null/void 2> testfile` | Standardfehlerausgabe wird umgestellt (im Beispiel auf die Datei `testfile`) |
| `&>` | `ls $HOME /dev/null/void &> testfile` | Standardausgabe und Standardfehlerausgabe werden in gleiche Ausgabe umgeleitet (im Beispiel auf die Datei `testfile`) |
| `>&1` | `ls -l /dev/null/void >&1` | Strom wird auf Standardausgabe umgeleitet |
| `>&2` | `echo "Hello world!" >&2` | Strom wird auf Standardfehlerausgabe umgeleitet |
| `exec 1>` | `exec 1> testfilev | Standardausgabe wird, bspw. in Skript oder in geöffneter, permanent umgestellt (im Beispiel auf die Datei `testfile`) |
| `exec 0<` | `exec 0< testfile` | Standardeingabe wird umgestellt (im Beispiel auf die Datei `testfile`) |
| `exec 3<>` | `exec 3<> testfile` | Für Datenstrom Ziel sowohl als Ein- wie Ausgabe definieren (im Beispiel Ziel `testfile`) |
| `>&-` | `exec 3>&-` | Datenstrom schliessen (im Beispiel für Datenstrom `3`) |
| `tee` | `date \| tee testfile` | Standardeingabe wird gleichzeitig nach Standardausgabe und einer weiteren Ausgabe weitergeleitet (im Beispiel `testfile`) |
Für den Moment s. <http://www.tldp.org/LDP/abs/html/string-manipulation.html>
Bash-Einzeiler
--------------
## Bash-Einzeiler
### Verschlüsseltes tar-Archiv extrahieren
gpg --decrypt einedatei.tar.gpg | tar xf -
```bash
gpg --decrypt einedatei.tar.gpg | tar xf -
```
### Symmetrische Verschlüsselung eines archivierten Verzeichnisses
tar cz mein_verzeichnis | gpg -co mein_archiv.tar.gpg
```bash
tar cz mein_verzeichnis | gpg -co mein_archiv.tar.gpg
```
### Pfad zur ausführbaren Datei eines Prozesses
sudo readlink -f /proc/<pid>/exe
```bash
sudo readlink-f /proc/<pid>/exe
```
### Rekursives Suchen und Ersetzen
find -type f -exec sed -i 's/<alt>/<neu>/g' {} \;
```bash
find -type f -execsed-i's/<alt>/<neu>/g'{}\;
```
### Pipe zu mehreren Commands
```bash
cat eine_datei | tee>(grep"ein_muster")>(grep"ein_weiteres_muster")>/dev/null | less
```
Mithilfe von ``tee`` und [Prozessersetzung](http://tldp.org/LDP/abs/html/process-sub.html) kann das Ergebnis eines Befehls an verschiedene weitere Befehle gepipt werden. Da ``tee`` standardmässig in Dateien (in diesem Beispiel sind das durch die Substitution die ``grep``-Befehle) und nach ``stdout`` schreibt, muss hier Letzteres nach ``/dev/null`` umgeleitet werden, da ansonsten sowohl das gesamte Ergebnis von ``cat`` als auch die Ergebnisse der ``grep``-Befehle an den letzten Befehl weitergeleitet werden.
### Zählen von abweichenden Zeilen in zwei Dateien