Tipps und Tricks zur bash

Aus dem IServ-Wiki
Version vom 7. September 2006, 15:19 Uhr von Martin von Wittich (Diskussion | Beiträge) (+Content :-D)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Die bash ist die Standard-Shell unter Linux.

Konfiguration

Globale Konfiguration
/etc/bashrc
Benutzerspezifische Konfiguration
~/.bashrc (wird für Nicht-Loginshells ausgeführt)
~/.bash_profile (wird für Loginshells ausgeführt, führt normalerweise die .bashrc ebenfalls aus)

Übergeben von Dateinamen

Mehrere Dateinamen

Im Gegensatz zu DOS können an praktisch alle Linux-Tools beliebig viele Dateinamen per Parameter übergeben werden. Statt

$ rm Datei1
$ rm Datei2
$ rm Datei3

kann auch einfach

$ rm Datei1 Datei2 Datei3

ausgeführt werden.

Platzhalter / Wildcards

Ähnlich wie bei DOS können Platzhalter in Dateinamen verwendet werden:

  • *: für beliebig viele beliebige Zeichen
  • ?: für ein beliebiges Zeichen
  • Datei[1-3]: für "Datei1 Datei2 Datei3"
  • Datei[13]: für "Datei1 Datei3"
  • Datei{1,3}: für "Datei1 Datei3"


Ein wichtiger Unterschied hierbei ist jedoch, dass die Platzhalter nicht von dem Programm, sondern von der Shell ausgewertet werden. Wenn ein Verzeichnis beispielsweise die Dateien Datei1, Datei2 und Datei3 enthält, und der Befehl

rm Datei?

ausgeführt wird, dann macht die Shell intern

rm Datei1 Datei2 Datei3

daraus - rm erfährt also gar nicht, dass der Benutzer Datei? eingegeben hat.

Mehrere Dateien umbenennen

Aus diesem Grund funktioniert die aus DOS gewohnte Syntax

ren *.alt *.neu

unter Linux nicht - die bash würde aus

mv Datei* File*
mv Datei1 Datei2 Datei3 File*

machen. Glücklicherweise erkennt mv den Lapsus und verweigert die Operation.

Stattdessen bedient man sich dazu einer for-Schleife:

for i in Datei*; do mv $i File${i/Datei}; done

Das ${i/Datei} schneidet hierbei den Teil Datei aus dem Namen weg und gibt nur den Rest, also die Zahl, zurück.