[linux-l] Re: Mac und Linux
Mike Dornberger
Mike.Dornberger at gmx.de
Do Aug 3 19:34:45 CEST 2006
Hi,
On Thu, Aug 03, 2006 at 11:47:58AM +0000, Rocco Rutte wrote:
> Hi,
>
> * 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
[...]
> IMHO hat getopt() da überhaupt nichts an den Argumenten zu fummeln; es
> hat sie genauso weiterzugeben wie es sie von der Shell bekommt und nur
> eben auf zustätzliche Optionen pro Argument zu gucken.
Warum? Manchmal macht das schon Sinn. Eben wegen Faulheit der User. Gerade
bei ls:
$ ls blahfasel
Oh, eigentlich wollte ich ja wissen, wie groß das ist. Also, <Pfeil nach
oben> <Space> <-> <l> <Return>
> >"-l" wird jedenfalls bei "ls * -l" unter OS-X angemeckert mit der Meldung,
> >es gäbe keine Datei namens "-l".
Diese Libc permutiert die Argumente also per Default nicht.
> Als Programmierer möchte ich die _exakt_ so bekommen wie der User sie
Nein, nicht unbedingt. Oft ist es ziemlich egal. Und wenn, kann man das
abstellen. (S. u.)
> mir gibt, auch in der Reihenfolge. Es gibt ja Situationen, in denen die
> Reihenfolge eine Rolle spielt. Als blödes Beispiel mal sowas wie git
> (die kein getopt() benutzen):
>
> $ git commit -a -v
>
> wäre dann wohl:
>
> $ git -a -v commit
>
> Pfui, nein, danke (auch wenn ich mit getopt() -a und -v wohl überhaupt
> nicht sehen würde, evtl.). :)
Nun haut mal alle nicht so auf der GNU libc rum! Erstmal die man page lesen!
:)
By default, getopt() permutes the contents of argv as it scans, so that
eventually all the non-options are at the end. Two other modes are
also implemented. If the first character of optstring is '+' or the
environment variable POSIXLY_CORRECT is set, then option processing
stops as soon as a non-option argument is encountered. If the first
character of optstring is '-', then each non-option argv-element is
handled as if it were the argument of an option with character code 1.
(This is used by programs that were written to expect options and other
argv-elements in any order and that care about the ordering of the
two.) The special argument "--" forces an end of option-scanning
regardless of the scanning mode.
Mach also einfach ein + in den optstring, wenn dir die Reihenfolge wichtig
ist.
Hm, kann man eigentlich die getopt* nochmal auf argv ansetzen, wenn man
sowas wie a2ps machen will, wo man verschieden Switches zu verschiedenen
Dateien haben will? (Naja, probiere ich jetzt nicht aus.)
Gruß,
Mike
Mehr Informationen über die Mailingliste linux-l