2013-08-07 13 views
7

Ein typisches Format für die Kommandozeilenargumente Format ist:Wie Befehlszeilenargument Schlüsselwertpaare

myApp --myArg=myValue 

Was passiert, wenn ich in einer Reihe von Schlüssel-Wert-Paare über die Befehlszeile übergeben möchten? Etwas wie:

myApp --myList={arg1=val1;arg2=val2;arg3=val3...} 

Seit there seems to be no standard for this sort of thing kann jedes Beispiel liefern von gut genutzt Dienstprogramme, die diese Art von Befehlszeilenargument Eingang haben? Ich stocherte in einigen Manpages herum, fand aber keine.

Edit: Ich frage mich beide, wie die Eingabe formatiert werden sollte und wie der Hilfetext aussehen könnte.

Antwort

5

Ich denke, es hängt weitgehend davon ab, wie Sie die Argumente in Ihrem Programm analysieren.

Hier sind einige Beispiele, dass die Programme mehrere Schlüssel-Wert-Paar-Werte akzeptieren.

Mann php:

--define foo[=bar] 
    -d foo[=bar] Define INI entry foo with value bar 

Mann git:

-c <name>=<value> 
     Pass a configuration parameter to the command. The value given will 
     override values from configuration files. The <name> is expected in 
     the same format as listed by git config (subkeys separated by 
     dots). 

Für beide kann man mehrere -d oder -c Argumente an die Programme übergeben, die Ihnen die Möglichkeit, eine Liste von Schlüssel- zu liefern Wert Paare zu den Programmen.

IMO, es ist kein großes Problem mit Ihrem eigenen Stil zu akzeptieren Listen von Schlüssel-Wert-Paare für Ihr Programm, solange es funktioniert und ist gut dokumentiert. :)

S.S .: Ich denke, diese Frage wäre eher auf Programmers Stack Exchange anstatt auf SO gelegt werden. Siehe here und here.

2

Wenn die App so viele Argumente braucht, würde ich eine Config-Datei verwenden, anstatt sie in der Kommandozeile übergeben:

myApp --config=file.cnf

Dieser Ansatz hat die folgenden Vorteile:

  • Flexibilität - Sie können eine Reihe von Konfigurationen für verschiedene Aufrufe vorbereitet haben, und verwenden Sie sie einfach,
  • keine Probleme mit Zitaten - es ist immer schmerzhaft, wenn Befehlszeilenargumente Leerzeichen haben, double qu otes, <,>, oder andere Sonderzeichen,
  • Einfachheit - Sie steuern das Konfigurationsdateiformat, es kann zum Beispiel INI, JSON, XML usw. Es ist einfach zu erstellen und so einfach zu parsen wie Parsing-Befehlszeile - - Wenn nicht einfacher,
  • Sicherheit - wenn irgendein Argument empfindlich sein kann, ist es nicht von Werkzeugen sichtbar, die Befehlszeilenargumente anzeigen.
Verwandte Themen