[linux-l] Re: Mac und Linux
Volker Grabsch
vog at notjusthosting.com
Fr Aug 4 09:06:52 CEST 2006
On Thu, Aug 03, 2006 at 11:47:58AM +0000, Rocco Rutte wrote:
> * Oliver Bandel [06-08-03 13:30:43 +0200] wrote:
>
> >Naja, wenn man es als konsequent betrachtet, nicht als Schikane,
> >dann ist Linux da inkonsequent: erst die Switsches, dann die anderen
> >Args.
>
> Die glibc nehme ich an. IMHO ist es dennoch ein Bug und ich habe
> irgendwo eine sehr lange Diskussion darüber im Hinterkopf (evtl. d.a.s.r
> oder so in der Richtung). Also benutze ich wohl kein getopt() mehr für
> Software, die mit der glibc laufen könnte.
Ich habe mir vor kurzem getopt_long() nochmal angesehen, weil ich es
gebraucht habe. Im Manual von GNU-getopt steht klar drin, dass
die Argumente permutiert werden (switches und switch-Argumente nach
vorn). Das hat den Sinn, dass man später alle positionalen Argumente
in einer einzigen Schleife abarbeiten kann, indem man argv[optind]
... argv[argc-1] durchläuft.
Für Werkzeuge, die eine Liste von Dateien erwarten, ist das sehr
praktisch. Bei git & Co. ist es das vielleicht nicht ..
> $ git commit -a -v
>
> wäre dann wohl:
>
> $ git -a -v commit
>
> Pfui, nein, danke
Wie auch immer. "commit" könnte genauso ein "switch" sein, und
dann wäre alles gut:
$ git --commit -a -v
Oder mehrere Binaries:
$ git-commit -a -v
GNU-getopt ist nunmal an den GNU-Stil der Argumente angepasst.
Davon abgesehen kann ich kein Problem darin finden, zuerst alle
Schalter zu setzen (meistens nur auf Variablen-Werte), danch
das Kommando (commit) in argv[optind] zu holen, und die restlichen
Argumente dann aus argv[optind] ... argv[argc-1].
Ist doch eher eine Frage des Programmier-Stils, ob man nun
positionale und Keyword-Argumente durcheinander verarbeitet,
oder eins nach dem anderen.
Es kann nur an einer einzigen Stelle knallen, nämlich dann,
wenn es gleichnamige globale und lokale Schalter gäbe, also
git -r 1 commit -r 1 ...
wobei das erste "-r 1" eine andere Bedeutung als das letzte "-r"
hat. Wenn dann auch noch das eine "-r" ein Argument nehmen würde
und das andere nicht, würde sowieso kein getopt der Welt mehr helfen
können. Ich finde es nicht schlecht, dass einen GNU-getopt nicht
dabei unterstützt, solche Design-Fehler in seiner Argumenten-Struktur
umzusetzen.
Viele Grüße,
Volker
--
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR
Mehr Informationen über die Mailingliste linux-l