System-Befehle
Mit JayMo lassen sich Befehle an das System senden.
Die nachfolgenden Befehle orientieren sich an Linux und funktionieren evtl. auf einem anderen System nicht in dieser Form.
Achtung!
Die Befehle werden teils direkt und ungeprüft ausgeführt!
Sofort und direkt
Ein Systembefehl wird innerhalb von Akzentzeichen definiert. Hier ist es egal, ob ´ oder ` verwendet werden.
´echo 5´
Der Befehl wird sofort ausgeführt. Die Ausgabe erfolgt ebenso direkt, Tastatureingaben werden auch abgefragt:
´touch abc.txt; mv -vi abc.txt xyz.txt; rm -vi xyz.txt´
Rückgabewert ist der Rückgabewert des ausgeführten Befehls. Meist signalisiert der Rückgabewert '0' eine korrekte Ausführung und Beendigung.
Ausgabe verwenden
Wird die Ausgabe (Output) des Befehls benötigt, so kann ein 'o' ("Modifier") angehängt werden:
´echo 5´o.print
Dieser Befehl wird ebenso sofort ausgeführt. Jedoch wird die Ausgabe gespeichert und kann direkt in nachfolgenden Funktionen verwendet und, wie hier im Beispiel, ausgegeben werden.
So lassen sich Systembefehle direkt integrieren und weiter verarbeiten.
´ls´o.lower.lines.implode(' ').print
Alle Rückmeldungen puffern
Mit dem Modifier 'b' (für "buffer") werden alle Rückmeldungen des Befehls gepuffert. Diese lassen sich mit einer "FunctionMap" einzeln abrufen:
´echo 5´b.print
Die FunctionMap stellt hier folgende Funktionen bereit:
Funktion | Info |
---|---|
|
Enthält einen String mit der Ausgabe (StdOut) des Befehls |
|
Enthält einen String mit der Fehlerausgabe (StdErr) des Befehls |
|
Enthält als Integer den Rückgabewert des Befehls |
So lassen sich nun Ausgabe, Fehler und Rückgabe ausgeben:
result = ´echo 5´b
result.output.print
result.errors.print
result.result.print
Übersicht der Modifier
Nach den Akzentzeichen können folgende Zeichen angehängt werden:
Modifier | Aufbau | Rückgabewert | Ausführlich |
---|---|---|---|
r |
|
|
|
r |
|
|
|
o |
|
|
|
e |
|
|
|
b |
|
|
|
Befehl aufbauen
Wird der Befehl innerhalb der Akzentzeichen in Klammern gesetzt, kann flexibel ein Befehl konstruiert werden:
nr = 3
´( "echo " + nr )´o.print
Hier lassen sich ebenso ("Modifier") verwenden.
Pipe to Command
Ein Shellbefehl lässt sich in eine Verarbeitungskette einbauen. So wird das aktuelle Objekt via ".toStr" als String an den Shellbefehl übergeben.
123.´echo´.describe
Auch hier sind Modifier möglich:
123.´echo´o.describe
123.´echo´b.describe
Ebenso kann der Befehl mittels Klammern individuell aufgebaut werden:
123.´( "echo" )´b.describe
Da hier effektiv die Funktion ".pipeToCmd" ausgeführt wird, lässt sich diese natürlich auch direkt aufrufen:
123.pipeToCmd( "echo" ).describe
Command-Objekt
Mit den vorherigen Varianten kann sehr schnell ein System-Befehl ausgeführt werden. Dies sind allerdings nur Abkürzungen für ein "Cmd"-Objekt, welches noch weitere Möglichkeiten bietet.
Folgende zwei Zeilen sind identisch:
´echo 5´o.print
Cmd("echo 5").output.print
Da ein Cmd-Objekt (Command-Object) nicht sofort ausgeführt wird, eröffnen sich weitere Möglichkeiten:
Funktion | Beschreibung | ||
---|---|---|---|
|
.exec | Befehl ausführen, Benutzer-Eingaben abfragen, sofortige Ausgabe | |
|
Befehl wird ausgeführt, dessen Ausgabe (StdOut) als "Str" zurückgegeben. | ||
|
Befehl wird ausgeführt, dessen Fehler-Ausgabe (StdErr) als "Str" zurückgegeben. | ||
|
Befehl ausführen, abwarten und eine "FunctionMap" mit allen gesammelten Informationen zurückgeben | ||
|
Der Befehl wird im Hintergrund ausgeführt. Die Rückgabe ist somit immer "nil". | ||
|
Es wird der Befehl ausgeführt und auf die Beendigung gewartet. Danach wird der Exit-Code zurückgegeben. |
Ebenso ist eine mehrfache Ausführung möglich:
c = Cmd("echo 7")
c.live.print # Direkt ausführen
c.forget # Im Hintergrund ausführen