[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