[linux-l] Re: Mac und Linux

Oliver Bandel oliver at first.in-berlin.de
Di Aug 8 07:44:44 CEST 2006


On Tue, Aug 08, 2006 at 01:31:05AM +0200, Peter Ross wrote:
> Oliver Bandel wrote:
> 
> > Es muss kein Builtin sein, um die Reihenfolge der Args zu ändern. Die
> > Shell könnte auch vor Aufruf der externen Tools dies tun.
> 
> Ich bevorzuge deterministische, durchschaubare Systeme.

Deterministisch ist es ja, wenn man eine Sortierung auf die Argumente
ansetzt, und durchschaubar auch. Man muss es nur wissen. ;-)

Das könnte ggf. die Durchschaubarkeit sogar verbessern, und auch die
Programmierung vereinfachen. Denn man weiss immer, welche Reihenfolge
im argv steht.
(Allergins sind dem user dann die lachsen Eingaben erlaubt; ist evtl.
 ja nicht gewollt?! Man könnte auch eine TYPPRÜFUNG machen und sowas
 als NICHT ERLAUBTE EINGABE klassifizieren, statt klammheimlich einfach
 "-l" und andere Args, die mit "-" beginnen als nicht-switches zu interpretieren,
 wenn sie auf andere nicht-switches folgen und als switches zu inerpretieren,
 wenn sie denn benutzt werden, bevor andere nicht-switches auftreten.
 IMHO wäre das ein gangbarer Weg, wenngleich etwas ungewohnt. Das hätte
 aber den Vorteil, daß man Eingabefehler auf Shell-Ebene abfangen kann.
 Das wäre der dritte Weg, den ich eigentlich am Anfang schon mal erwähnte,
 aber im Argumentationsfaden wirgendwo verloren hatte.)

> 
> Die Benutzung von "ls * -l" statt "ls -l *" bereichert das Universum nicht
> wirklich und sollte m.E. daher nicht durch obskure Shells, glibcs,
> Umgebungsvariablen oder so unterstuetzt werden.

Ist auch hier die Frage, was man bevorzugt.
    Die Sortierung (in dem Sinne der Switches/non-switches) der Args würde 
dafür sorgen, daß "ls * -l" akzeptiert würde, und das jew. Programm
die Eingaben immer so bekommt, als ob der User "ls -l *" einggeeben hätte.
Das vereinfacht die Programmierung.
   Ohne Sortierung würde man ggf. wie bisher eine Fehlermeldung bekommen,
falls es keine Datei "-l" gibt. Wieso muss man hier nicht "-- -l" eingeben,
wie sonst auch? Warum wird "-l" als Dateiname akzeptiert?

Man könnte auch einen anderen Weg gehen und grundsätzlich alle Args, die mit
"-" beginnen als Switches zu betrachten und *immer* ein "--" für die Ende-
Markierung der Switches zu erwarten.

Wieso soll man als User einerseits mit "--" hantieren, manchmal aber wird
ein Argument, das mit "-" beginnt als Dateiname akzeptiert?
Soll alles, was nach Argumenten, die nicht mit "-" beginnen automatisch als
Dateiname akzeptiert werden? Das entspräche dem Ansatz, daß Argumente, die
keine Switches sind, immer am Schluß, also nach den Switches folgen.

Das dumme hierbei ist aber, daß man dann kontextabhängig parsen muß.
Das ist zwar auch deterministisch und durchschaubar; aber ist es nicht
unnötig kompliziert?

Ganz entschieden habe ich mich noch nicht, aber daß es unterschiedlich gehandhabt
wird, ist nun einmal so. Und daß dies *nicht* konfigurierbar ist, das hat Nachteile
für den Benutzer, der z.B. Scripte schreibt. Der muß nämlich seine Skripte
ggf. anpassen an einen Stil, der überall funktioniert. Dann könnte man diesen
aber entweder grundsätzlich erwarten (also Linux' laxe hnadhabe diesbezüglich
abschaffen), oder man macht es konfigurierbar.
Wenn man zum Parsen eine Lib benutzt, könnte die das doch selbst prüfen.
Und wenn es keine Lib ist, dann fragt man eben die Umgebungsvariable,
die dies konfiguriert, im eigenen Parser ab.

Es gibt eine Reihe möglicher Wege. Manche werden ohnehin auf unterschiedlichen
Systemen schon gegangen. Beide haben Vor- und Nachteile (sowohl bzgl.
Programmierung als auch Benutzung).
Was spricht dagegen, beide Möglichkeiten (oder gar die dritte auch noch) zu erlauben,
dies aber per ENV zu steuern?!

Ansonsten hat man das Problem, daß man *garnix* steuern kann und beim Migrieren
der eigenen Skripte u.U. auf die Nase fällt (rewrite from scratch;
Portierungsaufwand; Irritation der Benutzer (und der Programmierer)).

Gruß,
   Oliver





Mehr Informationen über die Mailingliste linux-l