Shell-Aliase effektiv nutzen

Veröffentlicht von Thomas Fahle am (Permalink)

Wenn Sie Ihre Perl-Programme unter Linux entwickeln und häufig die Kommandozeile nutzen, lohnt es sich ein paar Minuten in die Automatisierung vieler Aufgaben zu investieren.

Hier bietet sich die Nutzung von Shell-Aliasen an, die permanent in einer Datei (z.B. ~/.perlaliases) gespeichert und bei jedem Login automatisch zur Verfügung gestellt werden.

Zahlenbasis konvertieren (Base Conversion)

Die folgenden Aliase sind bei der Umrechnung von einem Zahlensystem in ein anderes recht nützlich.

alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
alias d2o="perl -e 'printf qq|%o\n|, int( shift )'"
alias d2b="perl -e 'printf qq|%b\n|, int( shift )'"

alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'"
alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'"
alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'"

alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'"
alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'"
alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"

Quelle: Journal of brian_d_foy : Base conversions

Modulversionen ermitteln

Um die Version eines installierten Moduls muss man jedes Mal etwas wie

        perl -MName::des::Moduls -le "print Name::des::Moduls->VERSION"

eingeben. Das lässt sich recht einfach verkürzen.

function pmver ( ) {
        # Gibt die Version des (installierten) Perlmoduls aus
        # Usage pmver Perlmodul
        # Beispiel pmver CGI
        perl -M$1 -le "print $1->VERSION"
}

Beispiel

$ pmver CGI

3.15

Quelle: Hack #4 in Perl Hacks (ISBN: 3897214741)

Perl Debugger

Den Perl Debugger verwende ich häufig (perl -d programm.pl args ) auch als Perl-Shell (perl -d -e 0). Die Funktion debug erspart mir Tipparbeit.

function debug () {
        if [ -z $1 ]
        then
                perl -d -e 0
        else
                perl -d $@
        fi
}

Wenn debug ohne Parameter aufgerufen wird, wird eine Perl-Shell geöffnet; beim Aufruf mit Parametern werden die Parameter einfach an den Debugger weitergereicht.

$ debug

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(-e:1):	0
  DB<1> 

$ debug HalloWelt.pl

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(HalloWelt.pl:4):	print "Hallo Welt\n";

Verschiedene Perlversionen

Häufig habe ich mehrere Perlversionen auf meinem Rechner. Für jede Perlversion, die nicht im Standardpfad ($PATH) aufgeführt ist, lege ich einen eigenen Alias an.

alias perl510="/opt/perl510/bin/perl"

Beispiel

$ perl -v 

This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
...
$ perl510 -v 

This is perl, v5.10.0 built for i686-linux
...

Unterschiedliche Modulversionen

Manchmal muss ich meinen Code mit unterschiedlichen Modulversionen testen, z.B. nach Updates eines CPAN-Moduls. Das neue Modul wird dazu händisch in einen eigenen Ordner (z.B. /opt/devel/) installiert. Hier hilft der Schalter -I, der den @INC anpasst.

alias newmods="perl -I /opt/devel/"

Beispiel (inc.pl)

#!/usr/bin/perl
use warnings;
use strict;
print join("\n", @INC);

Wenn das Programm wie gewohnt aufgerufen wird, ergibt sich folgende Ausgabe.

$ perl inc.pl
/etc/perl
/usr/local/lib/perl/5.8.8
....

Bei der Verwendung von newmods werden die neueren Module aus /opt/devel zuerst geladen.

$  newmods inc.pl 
/opt/devel/
/etc/perl
/usr/local/lib/perl/5.8.8
....

Alle aufgeführten Aliase in der Übersicht

Hier noch einmal alle angesprochenen Aliase und Funktionen in einer Übersicht.

alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
alias d2o="perl -e 'printf qq|%o\n|, int( shift )'"
alias d2b="perl -e 'printf qq|%b\n|, int( shift )'"

alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'"
alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'"
alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'"

alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'"
alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'"
alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"

alias perl510="/opt/perl510/bin/perl"

alias newmods="perl -I /opt/devel/"

function pmver ( ) {
        # Gibt die Version des (installierten) Perlmoduls aus
        # Usage pmver Perlmodul
        # Beispiel pmver CGI
        perl -M$1 -le "print $1->VERSION"
}

function debug () {
       echo "Parameter $1"
        if [ -z $1 ]
        then
                perl -d -e 0
        else
                perl -d $@
        fi
}

Vorschläge bitte

Weitere produktive Shell-Aliase bitte in die Kommentare. Danke.

Siehe auch

Weitere Posts