Der letzte Teil endete mit einer Frage: Welcher Teil von dir C:\Windows\System32\*.exe ist das Programm, und welcher ist das, was Sie ihm sagen? dir ist das Programm, und alles andere sind seine Argumente. Argumente haben verschiedene Formen, jede mit eigenen Regeln, und darum geht es in diesem Teil.
Diese Formen kennen Sie schon, denn ein VFP-Befehl wie dieser enthält alle Teile eines Konsolenbefehls:
USE kunden ALIAS kd EXCLUSIVEUSE ist das, was ausgeführt wird, kunden ist das, womit es arbeitet, ALIAS kd ist eine Klausel mit ihrem Wert und EXCLUSIVE eine Klausel ohne Wert. Merken Sie sich diese vier, denn in der Konsole heißen sie Programm, Positionsargument, Option und Schalter.
Das Programm und seine Argumente
Jeder Befehl beginnt mit dem Programm. Was danach kommt, durch Leerzeichen getrennt, sind die Argumente:
ping -n 2 127.0.0.1| Teil | Was es ist |
|---|---|
ping | das Programm |
-n 2 | eine Option, -n, mit ihrem Wert, 2 |
127.0.0.1 | ein Positionsargument |
Die Shell (cmd oder PowerShell) zerlegt die Zeile an den Leerzeichen, sucht das Programm und übergibt ihm den Rest. Ab da entscheidet das Programm, was jedes Argument bedeutet. ping weiß, dass nach -n eine Zahl kommt, aber ein anderes Programm könnte -n für etwas anderes nutzen. Fast alle Programme halten sich an die Konventionen dieses Teils, auch wenn nichts sie dazu zwingt.
Positionsargumente: Die Reihenfolge zählt
Ein Positionsargument ist ein einzelner Wert ohne Namen davor. Das Programm erkennt ihn an seiner Stelle. Bei ping ist das einzige Positionsargument der Rechner, den Sie anpingen.
Das machen Sie in VFP schon bei jedem Programmaufruf mit Parametern:
DO rechnung WITH "B-2026-0042", DATE(), .T.
* und in rechnung.prg:
LPARAMETERS tcSerie, tdDatum, tlDruckenrechnung weiß nicht am Namen, dass "B-2026-0042" die Serie ist, sondern daran, dass sie zuerst kommt. Vertauschen Sie die Reihenfolge, bekommt tcSerie ein Datum. In der Konsole ist es genauso: copy quelle.txt ziel.txt und copy ziel.txt quelle.txt sind zwei sehr verschiedene Befehle.
Optionen: ein Name und manchmal ein Wert
Eine Option ist ein Argument mit Namen. Sie beginnt mit einem Bindestrich (oder einem Schrägstrich, dazu gleich mehr) und kann einen Wert dahinter haben:
ping -n 2 127.0.0.1Hier ist -n der Name und 2 sein Wert: wie oft gepingt wird. Der Vorteil des Namens ist, dass die Reihenfolge keine Rolle mehr spielt. Das hier tut dasselbe:
ping 127.0.0.1 -n 2Das ist es, was in VFP eine Klausel macht: USE kunden ALIAS kd EXCLUSIVE und USE kunden EXCLUSIVE ALIAS kd öffnen die Tabelle gleich. Prozeduren und Funktionen in VFP haben dagegen keine benannten Parameter: Alles geht nach Position, und deshalb weiß ab dem vierten Parameter niemand mehr, welcher welcher war. Optionen sind der Weg der Konsole, dieses Problem zu vermeiden.
Der Wert steht direkt hinter dem Namen, und das Programm nimmt ihn, ohne nachzusehen, was es ist. Wenn Sie ihn vergessen:
ping -n 127.0.0.1Debe especificar la dirección IP.Das ist Spanisch für „Sie müssen die IP-Adresse angeben“. ping hat 127.0.0.1 als Anzahl genommen und stand dann ohne Adresse da. Kaputt ist nichts: Es hat getan, was Sie ihm gesagt haben.
Schalter: Optionen ohne Wert
Manche Optionen haben keinen Wert. Sie sind da oder nicht, wie EXCLUSIVE. Man nennt sie Schalter (englisch flags), und sie schalten ein Verhalten ein:
dir /b/b sagt dir, nur die Namen auszugeben, ohne Datum und Größe. Ohne /b kommt die übliche vollständige Liste.
Schrägstrich oder Bindestrich, kurz oder lang
Vielleicht ist Ihnen aufgefallen, dass dir /b benutzt und ping -n. Das ist Windows-Geschichte: Programme, die aus MS-DOS stammen, nehmen den Schrägstrich, und fast alle anderen (die aus der Unix-Welt und nahezu jedes moderne Werkzeug) den Bindestrich. RUN /N aus VFP gehört zur Schrägstrich-Familie. ping akzeptiert beides, also funktioniert auch ping /n 2 127.0.0.1, aber verlassen Sie sich nicht darauf, dass jedes Programm das tut.
Beim Bindestrich gibt es zwei Formen:
- Kurz: ein Bindestrich und ein Buchstabe,
-n. - Lang: zwei Bindestriche und ein Wort,
--max-count.
Viele Programme haben beide für dieselbe Option: die kurze zum schnellen Tippen und die lange, damit man sie in einem Skript versteht. Bei Git zum Beispiel verlangen diese drei Befehle dasselbe, die letzte Änderung im Verlauf:
git log --oneline -n 1
git log --oneline --max-count=1
git log --oneline --max-count 109f72ae Clientes: altasDer Wert einer langen Option kann mit = angehängt oder durch ein Leerzeichen getrennt werden. --oneline ist ein langer Schalter: eine Zeile pro Änderung.
Unterbefehle: ein Programm, mehrere Aufgaben
ping macht eine Sache. Git macht Dutzende: den Verlauf zeigen, Änderungen speichern, die von anderen holen. Dafür nutzt es Unterbefehle (auch Befehle oder Verben genannt): Das erste Wort nach dem Programm sagt, welche Aufgabe Sie wollen.
git log
git status
git commit -m "Kunden: Neuanlagen"Als Fox-Entwickler gedacht: Git ist eine Klasse, und log, status und commit sind ihre Methoden. Jeder Unterbefehl hat seine eigenen Optionen, so wie jede Methode ihre Parameter hat: -m ist bei git commit die Änderungsnachricht und bedeutet bei git log etwas anderes.
Wenn Sie einen Unterbefehl tippen, den es nicht gibt, sagt das Programm es Ihnen:
git estadogit: 'estado' is not a git command. See 'git --help'.Genauso bei einer falsch geschriebenen Option: git log --onelin antwortet fatal: unrecognized argument: --onelin und tut nichts. Ein gut gemachtes Konsolenprogramm verweigert lieber, als zu raten, was Sie meinten.
Anführungszeichen: Leerzeichen trennen
Die Shell zerlegt die Zeile an den Leerzeichen, also kommt ein Name mit Leerzeichen zerstückelt an. Probieren Sie das in einem Testordner:
mkdir Meine Daten
dir /bDaten
Meinemkdir hat zwei Argumente bekommen und zwei Ordner angelegt. Mit Anführungszeichen versteht die Shell, dass es eines ist:
mkdir "Meine Daten"Meine DatenIn VFP passiert Ihnen dasselbe mit jedem Pfad, der Leerzeichen hat: DO C:\Meine Programme\verkauf.prg antwortet mit Syntax error, und DO "C:\Meine Programme\verkauf.prg" funktioniert. Auch VFP trennt am Leerzeichen. Und bei RUN ebenso: Hat der Pfad des Programms oder einer Datei Leerzeichen, kommt er im Befehl in Anführungszeichen.
Der doppelte Bindestrich: Hier enden die Optionen
Ein Teil ist selten zu sehen. Zwei Bindestriche allein, --, von allem getrennt, bedeuten „was danach kommt, sind keine Optionen, auch wenn es mit einem Bindestrich beginnt“.
Man braucht ihn, wenn ein Positionsargument wie eine Option aussieht. Stellen Sie sich eine Datei namens -n vor (seltsam, aber so etwas gibt es). Fragen Sie Git nach ihrem Verlauf, hält es sie für die Option -n:
git log --oneline -nerror: -n requires an argumentMit dem doppelten Bindestrich davor weiß Git, dass -n eine Datei ist:
git log --oneline -- -nef3e1a1 Fichero con nombre raroGit nutzt ihn auch, um klarzustellen, dass Dateien folgen: git log --oneline -- kunden.prg zeigt nur die Änderungen, die diese Datei betrafen.
Zum Üben
Öffnen Sie ein cmd, legen Sie einen Testordner an und wechseln Sie hinein:
mkdir C:\cli-tests
cd C:\cli-testsSagen Sie dann bei jedem Befehl, was das Programm ist, welche die Optionen sind (mit Wert oder Schalter) und welche die Positionsargumente. Führen Sie ihn danach aus:
ping -n 1 127.0.0.1
ping 127.0.0.1 -n 1
ping -n 127.0.0.1
mkdir Meine Daten
mkdir "Meine Daten 2"
dir /b
dir /b /ad C:\WindowsDer letzte hat zwei Schalter (/b, und /ad, das nur Ordner verlangt) und ein Positionsargument. Bei mir listet er 88 Ordner auf.
Wenn Sie ping ohne alles tippen, zeigt es, wie es benutzt wird (das erste Wort ist Spanisch für „Verwendung“):
Uso: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]Mit dem, was Sie heute gesehen haben, können Sie den Großteil dieser Zeile schon lesen: kurze Optionen, manche mit Wert (-n count) und manche ohne (-t). Die eckigen Klammern und der senkrechte Strich haben ihre eigene Bedeutung, und solche Hilfetexte zu lesen ist Thema von Teil 4. Vorher, in Teil 3, was ein Konsolenprogramm schreibt und wohin.