The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::Shell - Ausführung von Shell-Kommandos

BASE CLASS

Quiq::Hash

METHODS

Konstruktor/Destruktor

new() - Konstruktor

Synopsis

    $sh = $class->new(@opt);

Options

cmdPrefix => $str (Default: '')

Zeichenkette, der jeder Kommandozeile im Log vorangestellt wird.

cmdAnsiColor => $str (Default: '')

ANSI Escape-Sequenz, die auf eine Kommandozeile angewendet wird, z.B. 'bold red'.

dryRun => $bool (Default: 0)

Führe Kommandos nicht aus, sondern logge sie nur (impliziert log=>1).

log => $bool (Default: 0)

Log Commands to STDOUT.

logDest => $fd (Default: *STDOUT)

Datei-Deskriptor, auf den die Logmeldungen geschrieben werden.

logRewrite => $sub (Default: undef)

Callback-Methode, die die Kommandozeile vor dem Logging umschreibt. Dies ist nützlich, falls die Kommandozeile ein Passwort enthält, das im Log ausgeixt werden soll. Die Methode wird auf dem Shell-Objekt gerufen:

    logRewrite => sub {
        my ($sh,$cmd) = @_;
        # $cmd umschreiben
        return $cmd;
    },
msgPrefix => $str (Default: '')

Zeichenkette, die jeder Meldung im Log vorangestellt wird.

quiet => $bool

Unterdrücke stdout und stderr.

time => $bool (Default: 0)

Gib nach jedem Kommando die Zeit aus, die es benötigt hat.

timePrefix => $str (Default: '')

Zeichenkette, die jeder Zeitausgabe vorangestellt wird.

timeSummary => $bool (Default: 0)

Gib zum Schluss bei der Destrukturierung des Objekts die Gesamtausführungszeit aus.

Description

Instantiiere ein Shell-Objekt, und liefere eine Referenz auf dieses Objekt zurück.

DESTROY() - Destruktor

Synopsis

    $sh->%METH;

Description

Wenn timeSummary gesetzt ist, wird im Zuge der Destruktuierung die Gesamtausführungszeit für alle Kommandos, die über das Shell-Objekt ausgeführt wurden, ausgegeben.

Kommando ausführen

exec() - Führe Kommando aus

Synopsis

    $str|@arr = $this->exec($cmd,@opt);

Options

-capture => $channels (Default: keiner)

Liefere die die Programmausgabe auf dem Kanal bzw. den Kanälen $channels zurück. Mögliche Werte für $channels:

'stdout'

Liefere Ausgabe auf stdout, unterdrücke stderr.

'stderr'

Liefere Ausgabe auf stderr, unterdrücke stdout.

'stdout+stderr'

Liefere Ausgabe auf stdout und stderr zusammen.

'stdout,stderr'

Liefere Ausgabe auf stdout und stderr getrennt.

Für Beispiele siehe Abschnitt ""exec/Examples"".

-quiet => $bool (Default: 0)

Unterdrücke Programmausgabe auf stdout und stderr.

-sloppy => $bool (Default: 0)

Wirf keine Exception, wenn das Programm fehlschlägt, sondern liefere dessen Exitcode. Ist gleichzeitig die Option -capture angegeben, hat diese hinsichtlich des Rückgabewerts Priorität.

Returns

Der Rückgabewert richtet sich nach den Optionen @opt. Ist -capture definiert, wird die angegebene Programmausgabe geliefert. Ist -sloppy wahr, wird der Exitcode geliefert. Die Option -capture hat Priorität gegenüber der Option -sloppy. Sind weder -capture noch -sloppy angegeben, liefert die Methode keinen Wert.

Description

Führe Kommando $cmd aus. Im Falle eines Fehlers löse eine Exception aus.

Beginnt das Kommando $cmd mit einem Bindestrich, wird implizit die Option -sloppy gesetzt.

Examples

Unterdrücke Ausgabe auf stdout und stderr:

    $this->exec($cmd,-quiet=>1);

Liefere Ausgabe auf stdout:

    $stdout = $this->exec($cmd,-capture=>'stdout');

Liefere Ausgabe auf stderr:

    $stderr = $this->exec($cmd,-capture=>'stderr');

Liefere Ausgabe auf stdout und stderr zusammen:

    $output = $this->exec($cmd,-capture=>'stdout+stderr');

Liefere Ausgabe auf stdout und stderr getrennt:

    ($stdout,$stderr) = $this->exec($cmd,-capture=>'stdout,stderr');

Keine Exception, liefere Exitcode:

    $exitCode = $this->exec($cmd,-sloppy=>1);

Arbeitsverzeichnis wechseln

cd() - Wechsele das Arbeitsverzeichnis

Synopsis

    $sh->cd($dir);

Returns

Die Methode liefert keinen Wert zurück.

Description

Wechsle in Arbeitsverzeichnis $dir. Anmerkung: Diese Änderung gilt auch für den aufrufenden Prozess, nicht nur für das Shell-Objekt.

back() - Wechsele ins vorige Arbeitsverzeichnis zurück

Synopsis

    $this->back;

Fehlerbehandlung

checkError() - Löse Exception bei Kommandofehler aus

Synopsis

    $this->checkError($code,$errMsg,@cmd);

Returns

nichts

Description

Prüfe den Status einer vorhergehenden Programmausführung und löse eine Execption aus, wenn der Status ungleich 0 ist.

Examples

Prüfe den Ausführungsstatus von system():

    system($cmd);
    Quiq::Shell->checkError($?,$!,$cmd);

Prüfe den Ausführungsstatus des Backtick-Operators:

    $str = `$cmd`;
    Quiq::Shell->checkError($?,$!,$cmd);

Private Methoden

_logCmd() - Logge Kommandozeile

Synopsis

    $sh->_logCmd($cmd);

Description

Schreibe die Kommandozeile $cmd auf die Loghandle.

VERSION

1.141

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.