Auf der Suche nach einer vernünftigen Unix-Shell

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Benutzeravatar
chaos
User
Beiträge: 52
Registriert: Samstag 21. August 2004, 11:19

Beitragvon chaos » Montag 27. März 2006, 11:58

Also ist mal wieder GNU != POSIX..............
Slackware will never die.
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Beitragvon henning » Montag 27. März 2006, 12:03

Hmm... in der Tat, wenn ich es jetzt mit nem eigenen Progrämmchen ausprobiere, funktionierts sowohl mit zsh als auch mit bash, dann lag das Problem vielleicht ehr in dem progrämmchen, das ich benutzen wollte (weiß schon nicht mehr welches das derzeit war).

modelnine: Ich kenne sie Unix-Philosophie sehr wohl. Und wenn es keine Shellaufgabe ist, alle Dateien im Verzeichnis als Parameter übergeben zu können, warum gibt es dann "*" in dem meisten shells?

Ausserdem ist ja die Frage, wie eng man diese Philosophie auslegt.

Natürlich will ich gar kein Tool das alles kann. Ich verstehe diese Philosophie so, dass man kleine Progrämmchen hat, die eine bestimme Aufgabe erledigen. Diese kann man sich dann so zusammenbauen, wie man sie braucht.

z.B. ist es sinnvoll, dass date nur das Datum ausgibt und nicht gleich noch ne GUI und ne Terminverwaltung mit eingebaut hat ;-)

Aber ich finde es z.B. auch nützlich, dass man date ein Format-String übergeben kann, denn wenn das Datum in einem festgelegten Format und vielleicht auch nur auf englisch erscheinen würde, müsste man schon wieder recht viel fummeln um ein Datum mit deutschem Wochentag in seinem Lieblingsformat zu haben.
(Klar kann man das mit nem script hinkriegen, aber es ist halt ne häufig verlangte Aufgabe!)

Es gibt einen Punkt ab dem es schlicht und ergreifend albern ist soundsoviele Prozesse aneinanderzuhängen und irgendwelche Ausgaben zu parsen.
Spätestens dann wenn mehr Ressourcen (sei es von Mensch oder CPU) benötigt werden um Programm-ausgaben auseinanderzufummeln als für das eigentliche Problem, überlege ich mir halt, obs nicht ein bisschen weniger modular geht :wink:
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Montag 27. März 2006, 13:35

henning hat geschrieben:Hier sieht man das Problem: Die Dateinamen werden ungequoted übergeben!
Sie müssen auch nicht gequotet sein, da die argv auch Leerzeichen enthalten können:

Code: Alles auswählen

$ ll
insgesamt 4
-rwxr-x--- 1 x x 69 2006-03-27 14:33 aa.py
-rw-r----- 1 x x  0 2006-03-27 14:31 a b
-rw-r----- 1 x x  0 2006-03-27 14:31 c d
-rw-r----- 1 x x  0 2006-03-27 14:31 e f
-rw-r----- 1 x x  0 2006-03-27 14:31 g h
$ cat aa.py
#!/usr/bin/python
import sys
for n in sys.argv:
 print "parameter",n
$ ./aa.py *
parameter ./aa.py
parameter aa.py
parameter a b
parameter c d
parameter e f
parameter g h
BlackJack

Beitragvon BlackJack » Montag 27. März 2006, 22:24

henning hat geschrieben:Okay, ich hab mich vielleicht echt undeutlich ausgedrückt, aaalso:

Code: Alles auswählen

$ ls
Ein langer Dateiname.txt  Noch ein langer Name.foo  Und noch einer.bar


Das sind drei Dateien mit Leerzeichen im Namen.

Code: Alles auswählen

$ echo *
Ein langer Dateiname.txt Noch ein langer Name.foo Und noch einer.bar


Hier sieht man das Problem: Die Dateinamen werden ungequoted übergeben! Wenn ich jetzt z.B. ein python-programm habe, dass üder sys.argv Dateinamen erwartet, kriegt das schon Probleme die auseinanderzufummeln, und so gehts den meisten anderen Programmen auch.


Natürlich werden die da "ungequotet" übergeben oder willst Du das die Programme Quotezeichen mitbekommen statt der richtigen Namen!? Ich verstehe immer noch Dein Problem nicht. Der `*` macht schon das richtige. Schaust Du hier:

Code: Alles auswählen

bj@s8n:~/tmp/test> ls
foo bar.txt  spam eggs.txt  test.py
bj@s8n:~/tmp/test> ./test.py *
['foo bar.txt', 'spam eggs.txt', 'test.py']
bj@s8n:~/tmp/test> cat test.py
#!/usr/bin/env python
import sys
print sys.argv[1:]
bj@s8n:~/tmp/test>


Wie man sieht werden die Dateinamen mit Leerzeichen jeweils als ein Argument übergeben. Wenn dem nicht so wäre, dann hätte man doch ganz massive Probleme mit Leerzeichen in Dateinamen.

Kann es sein dass Du Probleme siehst, wo gar keine sind!?
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Beitragvon henning » Dienstag 28. März 2006, 08:27

Wenn du meine Postings aufmerksam gelesen hast, wird dir sicher aufgefallen sein, dass mein Problem schon gelöst ist und anscheinend auf der Seite eines Programms lag, welches wohl krampfhaft versucht hat, die übergebenen Argumente auch nochmal zu zerlegen (oder sie seinerseits ohne Quoting der shell übergeben hat oder was-weiß-ich. Jedenfalls weiß ich jetzt, dass das Sternchen sich doch vernünftig verhält :-)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder