Farbenfrohe Bash

Durch Zufall bin ich auf den Hilfeseiten des Debian Derivats aptosid gelandet und an dem Eintrag zu farbigen Terminals hängen geblieben.
Schon bei meinem Beitrag zu Grml 2010.12 hatte ich erwähnt, dass mir Grmls Gestaltung der Konsole gut gefallen hat. Ein wichtiger Punkt macht hierbei schon die Farbgebung aus.
Als Voreinstellung wird bei Debian und Ubuntu zwischen Nutzer und dem Superadmin Root in Terminals farblich nicht unterschieden. Der Hintergedanke: Die Ausgabe der Befehle sei wichtiger als ein farbiges Prompt, das nur ablenken würde.
Ich denke, es ist nicht verkehrt zumindest farblich kenntlich zu machen, ob man gerade mit einem normalen Nutzer oder mit Root Befehle in die Konsole eintippt. Während ein falscher Befehl als Standardnutzer oft nicht so dramatisch ist, haben root Befehle meistens weitreichende Konsequenzen. Aus großer Macht folgt eben auch große Verantwortung.
Um dem Nutzer am Prompt ein hellblaues Aussehen zu verpassen, muss die Datei .bashrc im Home Verzeichnis editiert werden. Zeile 39: force_color_prompt=yes wird auskommentiert und das Aussehen des Prompts in der Zeile

PS1='${debian_chroot:+($debian_chroot)}[33[01;36m]u@h[33[01;36m]:[33[01;36m]w[33[00m]$ '

angepasst. Die entscheidende Information für die Farbe steckt in den Abschnitten [01;36m]. Die Syntax für den Farbcode ist immer etwas wie 00;XX oder 01;XX.
Die Grundfarben sind:

[00;30] Schwarz
[00;31] Rot
[00;32] Grün
[00;33] Gelb
[00;34] Blau
[00;35] Magenta
[00;36] Hellblau
[00;37] Weiß

Danach muss für Root dementsprechend die Datei .bashrc im Verzeichnis /root geändert werden. Der wesentliche Code sieht bei beiden insgesamt so aus.

force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        color_prompt=yes
    else
        color_prompt=
    fi
fi
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}[33[01;31m]u@h[33[01;31m]:[33[01;31m]w[33[00m]$ '
Farbenfrohe Bash
Farbenfrohe Bash

Schriftfarbe, Hintergrund und weiteres Aussehen hängt vom verwendeten Terminal ab. Für den Terminal-Emulator rxvt-unicode, der bei mir den Gnome-Terminal ersetzt, gibt es schon einige gute Vorlagen im englischen Wiki auf archlinux.org, die alle wichtigen Einstellungen in ~/.Xdefaults ersetzen.
Meine .Xdefaults stammt ebenfalls von dort und wurde nur leicht angepasst. Wer meine Vorlage gebrauchen kann, findet sie hier.

Komplette Bash Completion für Debian

Sowohl Debian als auch Ubuntu nutzen natürlich die automatische Vervollständigung von Befehlen und Verzeichnissen der Bash, sobald man die TAB-Taste drückt.
In der Standardkonfiguration bietet Ubuntu darüber hinaus aber auch Vervollständigung von Programmoptionen an. Um dieses Feature ebenfalls bei Debian zu aktivieren, muss man folgendes tun.

  • Bash Completion installieren
    aptitude install bash-completion
  • ~/.bashrc und /etc/bash.bashrc ändern
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
     . /etc/bash_completion
fi

Einfach nach einer ähnlichen Codezeile wie der oberen Ausschau halten und diese mit dem oben stehenden Code ersetzen. Um die automatische Vervollständigung systemweit nutzen zu können, kann der Code auch direkt in der globalen Bash Konfigurationsdatei /etc/bash.bashrc ausgetauscht werden.
Wenn man schon mal dabei ist, kann man auch die # vor dem Schlüsselwort alias entfernen, damit gibt es gleich noch eine weitere nützliche Funktion für die bash hinzu.
Mit alias lassen sich beliebige Bash-Kommandos auf wenige Zeichen abkürzen, was das Tippen auf der Konsole deutlich einfacher macht.
Zur Erinnerung reicht das glaube ich erst einmal. 😉

Bash-Magie und ein paar For-Schleifen

Ich stand kürzlich vor der Aufgabe mehrere DV-, WMV- und Mov-Videodateien in ein freies Format umwandeln zu wollen. Dazu wollte ich unbedingt Theora als Videocodec und Vorbis als Audiocodec verwenden.
Um nicht jede Datei einzeln umwandeln zu müssen, gibt es unter Linux eine schnelle und bequeme Möglichkeit – die bash. Grml Fans würden natürlich nach der zsh schreien. 😉
Mehrere Videos mit ffmpeg von WMV- in das MKV-Containerformat mit Theora und Vorbis konvertieren

for i in *.wmv; do ffmpeg -i "$i" -vcodec libtheora -acodec libvorbis "${i%.*}".mkv; done

Mehrere Videos mit ffmpeg2theora von Mov- in das Ogv-Containerformat mit Theora und Vorbis konvertieren, Abtastrate 32000 Hz, 64 kb/s Audiobitrate

for i in *.mov; do ffmpeg2theora -H 32000 -A 64 "$i"; done

Das Schema ist immer das Gleiche. Eine for Schleife durchläuft alle Dateien in einem Ordner, in diesem Fall mit den Endungen .wmv oder .mov. Dabei wird dann entweder das Programm ffmpeg oder ffmpeg2theora ausgeführt und der Dateiname „$i“ übergeben. Die Anführungsstriche sind bei Sonderzeichen sinnvoll.
Bei ffmpeg wird duch die Konstruktion „${i%.*}“.mkv, die Dateiendung .wmv durch .mkv substituiert. Bei ffmpeg2theora ist das nicht nötig.
Bei beiden Programmen gibt es sehr viele Optionen, um den Output zu beeinflussen. Beide scheinen auch unterschiedlich effizient bei der Umwandlung in das freie Format Theora zu sein.
Prinzipiell muss man bei schon stark komprimierten Dateien damit rechnen, dass bei einer weiteren Umwandlung die Qualitätsverluste zunehmen. Am besten ist es, immer mit einer nur gering komprimierten DV-Datei zu arbeiten.
Zu den vielfältigen Möglichkeiten der Konvertierung sollte man sich die Handbuchseite der Programme näher anschauen. Die Option -v 7 sorgt z.B. dafür, dass die Qualität der Videowiedergabe besser wird, die Dateigröße aber ungefähr verdoppelt wird. Die Standardeinstellung ist -v 5. Es gibt auch bequeme Voreinstellungen bei ffmpeg2theora, z.B. die Option -p pro.

Zu guter Letzt hier noch eine schnelle Möglichkeit um viele TGA-Bilder in PNG zu konvertieren, für alle, die vielleicht noch ein paar alte World-of-Warcraft-Screenshots auf der Festplatte haben. 😉
Das Programm convert befindet sich im ImageMagick Paket jeder Linuxdistribution.

for i in *.tga; do convert "$i" "${i%.*}".png; done

Ein einfach zu bedienendes GUI für ffmpeg existiert auch und nennt sich WinFF.


Viel Spass beim Umwandeln in freie Formate. 🙂