wildcards unter HP-UX

Ok, jetzt wird langsam ein Schuh draus ;)

Deine Idee ist interessant, hat aber einige Schönheitsfehler:

Nergal schrieb:
...
Code:
diff file1.txt file1.txt
diff file1.txt file2.txt
diff file1.txt file3.txt
diff file2.txt file1.txt
diff file2.txt file2.txt
diff file2.txt file3.txt
diff file3.txt file1.txt
diff file3.txt file2.txt
diff file3.txt file3.txt

Hier sind drei Konstellationen, die niemand braucht und überflüssig sind: "diff file samefile".
Ausserdem kann sich das ganze ganz schön aufschwingen, wenn Du jede Permutation behandeln willst.

Noch ein Beispiel: Du möchtest mit einem Editor Deiner Wahl mehrere Textfiles bearbeiten:
"editor *.txt". Deine Shell würde den Editor mehrmals starten, was ganz schön auf die Ressourcen gehen kann. Wenn aber der Editor so ausgelegt ist, dass er mehrere Files, die als Parameter übergeben worden, in diesem Editor als Tabs öffnet, warum willst Du ihm diese Option nehmen?

Weiteres Beispiel? Ok: "cat *.txt |sort" liefert bei Deiner Shell jedes txt-file einzeln sortiert
zurück, ich will aber, dass er alles sortiert. Gerade cat würde bei Deiner Shell viel von seiner Nützlichkeit verlieren.

Gruss, Phorus

rikola schrieb:
Ja aber genau dort liegt doch schon das Problem, wie Wolfgang bereits meinte:...

Ähm, wolfgang? ;)
 
Zuletzt bearbeitet:
Phorus schrieb:
'tschuldige, keine Ahnung, wieso ich Dich mit Wolfgang_1 verwechselt habe!!!

@Nergal
Ich glaube, die Funktionsweise, die Du vorschlaegst, ist bei weitem nicht so kompakt, wie die tatsaechliche Implementation. Du beziehst Dich sehr auf das Anfangsbeispiel, uebersiehst aber, dass dies ein Spezialfall ist, der sich nicht verallgemeinern laesst. Phorus (Phorus? - Phorus!) hat ja schon ein paar Gegenbeispiele genannt, und es lassen sich schnell viele weitere nennen. Und viele Moeglichkeiten, die man jetzt hat, waeren in Deinem Vorschlag nicht moeglich. Was zum Beispiel, wenn das zweite Muster weniger Treffer erzielt als das erste? Oder man mit Deinem Schema Dateien umbenennen moechte, z.B. 'mv *.txt *.log' -> was passiert, wenn es Dateien mit Endung log gibt, aber anderem Stamm als die Textdateien? Soll der Stamm der ersten expansion genommen werden, sollen die bestehenden ueberschrieben werde? Und was mit Befehlen, die 1, 2, 3, oder... Optionen erlauben? Ich denke, man kommt so schnell auf undefinierte oder sehr unpraktische Kombinationen.
 
Freut mich, dass ihr die Grundidee mitbekommen habt :) .

Für mehr war der Pseudocode gar nicht ausgelegt. Mir ging es lediglich darum die prinzipielle Funktionsweise an einem möglichst simplen Beispiel zu demonstrieren.

Dementsprechend ist ein Programmaufruf wie im Beispiel aus den schon dargelegten Gründen wenig sinnvoll (Redundante Lösungen). Seht es Bitte nur als Gedankenskizze an und nicht als vermeintliche Endlösung !

Phorus schrieb:
Weiteres Beispiel? Ok: "cat *.txt |sort" liefert bei Deiner Shell jedes txt-file einzeln sortiert
zurück, ich will aber, dass er alles sortiert. Gerade cat würde bei Deiner Shell viel von seiner Nützlichkeit verlieren.

Klar, da die Shell keinen Einfluss auf die Funktionalität der Kommandos hat ist das auf jeden Fall ein limitierender Faktor. Aus diesem Grunde hatte ich etwas eher die folgende Idee gepostet:

Nergal schrieb:
Probleme wuerde es in jedem Fall geben, wenn wildcards in den Kommandooptionen auftauchen. In diesem Fall haette der Interpreter keine Moeglichkeit zu Unterscheiden, welche Wildcards er selbst auswerten soll und welche lediglich an das Kommando uebergeben werden sollen. Das wuerde auf jeden Fall die meisten Programme/Skripte durcheinanderwirbeln.
Eventuell koennte man jedoch die volle Flexibilitaet der Shell beibehalten, wenn man ein spezielles Tag benutzt, um Wildcards fuer die Shell von denen fuer das Kommando unterscheiden zu koennen. Sprich "muster*" wird als reiner Optionsparameter uebergeben und das * wird vom Interpreter nicht ausgewertet. Der Befehl wird somit korrekt ausgefuehrt. Bei einer Eingabe von "muster^*" z.B., wobei ^ natuerlich ein exklusives Symbol sein muesste, wuerde dann _keine_ Wildcard an den Kommandonamen uebergeben.

Es geht also nicht darum Wildcards entweder in der Shell oder im Skript/Programm auszuwerten, sondern vielmehr beides zu kombinieren. Das heisst die herkömmliche Übergabe von Wildcards via Kommandooptionen möchte ich keinesfalls Abschaffen!

Die Wahl, welche Variante man verwendet, liegt dann ganz und gar beim Benutzer. Für den einen Fall ist es dann sinnvoller die Wildcards von der Shell auswerten zu lassen, für den anderne Fall, wenn das Programm das übernimmt (Oder aber auch eine Kombination).
Besonders Sortierfunktionen sind ja nicht Aufgabe der Shell. Bei "pstoepsi" andererseits würde es durchaus eine sinnvolle Ergänzung sein.

rikola schrieb:
Ich glaube, die Funktionsweise, die Du vorschlaegst, ist bei weitem nicht so kompakt, wie die tatsaechliche Implementation. Du beziehst Dich sehr auf das Anfangsbeispiel, uebersiehst aber, dass dies ein Spezialfall ist, der sich nicht verallgemeinern laesst. Phorus (Phorus? - Phorus!) hat ja schon ein paar Gegenbeispiele genannt, und es lassen sich schnell viele weitere nennen.

Wie gesagt, rudimentärer Pseudocode. Bei einer Verallgemeinerung muessten natürlich auch andere Kombinationen mit abgefangen werden.

rikola schrieb:
Oder man mit Deinem Schema Dateien umbenennen moechte, z.B. 'mv *.txt *.log' -> was passiert, wenn es Dateien mit Endung log gibt, aber anderem Stamm als die Textdateien? Soll der Stamm der ersten expansion genommen werden, sollen die bestehenden ueberschrieben werde?

Jeps, daran hatte ich auch schon gedacht. In disem Fall hat man verschiedene Optionen. In meinem Pseudocode Beispiel wurde jedem Wildcard ein eigenes Array spendiert. Setzt man das ganze so um, dann müsste man natürlich auch die Option einbauen, Wildcards mit Identifiern zu verknüpfen. Also z.B. ^*1^ kennzeichnet einen Stamm während ^*2^ einen anderen beschreibt.
Alternativ könnte man es so machen, wie in anderen Interpretern auch, nämlich dass dem Wildcard * nur ein Array zugewiesen wird (Sinnvollerweise dem ersten * was auftaucht).

Ich möchte allerdings nochmal darauf hinweisen, alles ist rein hypothetisch. Alle Beispiele die sich aufzählen lassen, sind für die gewohnte Shell programmiert. Natürlich ist dementsprechend auch der Syntax auf diese Shell optimiert. Üblicherweise passen sich die Programme/Skripte dem Interpreter an und nicht umgekehrt.
Gibt man dem Interpreter somit mehr Freiheiten, dann bringt es nur etwas, wenn diese Freiheiten auch durch entsprechende Programme ausgenutzt werden.
 
Zurück
Oben