[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