Sprach-Konstrukte / System-Befehle

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
.output
Enthält einen String mit der Ausgabe (StdOut) des Befehls
.errors
Enthält einen String mit der Fehlerausgabe (StdErr) des Befehls
.result
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
´echo 5´
0
Cmd( "echo 5" ).exec
Cmd( "echo 5" ).live
r
´echo 5´r
0
Cmd( "echo 5" ).exec
Cmd( "echo 5" ).live
o
´echo 5´o
"5"
Cmd( "echo 5" ).output
e
´echo 5´e
""
Cmd( "echo 5" ).error
b
´echo 5´b
<FunctionMap>
Cmd( "echo 5" ).buffer

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
.live \
.exec Befehl ausführen, Benutzer-Eingaben abfragen, sofortige Ausgabe
.output
Befehl wird ausgeführt, dessen Ausgabe (StdOut) als "Str" zurückgegeben.
.error
Befehl wird ausgeführt, dessen Fehler-Ausgabe (StdErr) als "Str" zurückgegeben.
.buffer
Befehl ausführen, abwarten und eine "FunctionMap" mit allen gesammelten Informationen zurückgeben
.forget
Der Befehl wird im Hintergrund ausgeführt. Die Rückgabe ist somit immer "nil".
.wait
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
- Powered by OghsWiki -

 

 

Unterstützen

Die Entwicklung von "JayMo" wird derzeit nur durch Eigeninitiative ermöglicht.

Erhalten:  0 €