wildcards unter HP-UX

Dieses Thema im Forum "Unix Derivate & sonst. Unix Fragen" wurde erstellt von Nergal, 31.01.2006.

  1. Nergal

    Nergal Grünschnabel

    Dabei seit:
    31.01.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo,
    zum Problem:

    Ich arbeite unter HP-UX und habe eine ganze Reihe von Postscript Grafiken, welche ich in eps Dateien mit Vorschau konvertieren moechte. Bei einzelnen Dateien ist das ganze mittels des Befehls pstoepsi kein Problem.

    Verwende ich jedoch Platzhalter um den gesamten Ordner zu konvertieren, dann streikt die shell :

    Code:
    pstoepsi *.ps *.epsi
    Daher die Frage:
    Gibt es eine unkomplizierte Moeglichkeit um diese Aufgabe zu bewaeltigen? Natuerlich koennte ich ein Shell Skript schreiben, allerdings geht es mir vor allem darum zu verstehen, wie ich unter HP-UX vernuenftig mit Wildcards arbeiten kann.

    Ich bin fuer jeden Vorschlag dankbar.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 allesmueller, 31.01.2006
    allesmueller

    allesmueller Eroberer

    Dabei seit:
    05.07.2005
    Beiträge:
    69
    Zustimmungen:
    0
    Ich fuerchte nein, pstoepsi kann halt nicht mit mehreren Inputfiles umgehen ...
    ich wuerde das an der Kommandline so machen:

    for i in `ls -1 *.ps`
    do
    ps2epsi ${i}
    done

    sers,
    allesmueller
     
  4. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Wie schon von allesmueller angedeutet, ist dies sicher kein Problem von HP-UX, sondern am Argument-Parsing von pstoepsi.

    Falls Du die Endung gerne auf epsi setzen moechtest, geht uebrigens auch folgende Loesung (unter bash):
    Code:
    for i in *.ps; do pstoepsi $i ${i%ps}epsi ; done
    
     
  5. #4 allesmueller, 31.01.2006
    allesmueller

    allesmueller Eroberer

    Dabei seit:
    05.07.2005
    Beiträge:
    69
    Zustimmungen:
    0
    rikola,
    yepp gute Idee - ich verwend kaum bash syntax,
    ich kack dann immer mit "basename" herum :)

    in diesem Fall aber nicht notwendig, da das Programm das selbst macht.

    sers,
    allesmueller
     
  6. Nergal

    Nergal Grünschnabel

    Dabei seit:
    31.01.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Danke fuer die schnellen Antworten!

    Der Einzeiler von rikola hat gluecklicherweise auch mit der korn shell funktioniert, so dass alle Dateien erfolgreich konvertiert werden konnten. Danke :)

    Trotzdem wuerde es mich sehr interessieren, warum der Shell Interpreter diese Funktionaliaet nicht selbstaendig uebernimmt? Meines Erachtens waere es sehr intuitiv erst die wildcards auszuwerten und somit vorab eine Dateiliste(tabelle) zu erstellen. Im zweiten Schritt wuerde dann die Anwendung des Kommandos (in diesem Fall pstoepsi) auf jeden Listeneintrag erfolgen.

    Kennt jemand die Hintergruende fuer diese Auslegung des Interpreters?
     
  7. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Woher soll die Shell wissen, welcherart Parameter einzelne Programme verlangen? Es gibt Programme/Befehle, die mit multiblen Parametern arbeiten können oder sie auch brauchen. Als Beispiel, wie nach Deiner Vorstellung "ls -l -a dirname" abgearbeitet wird: "ls -l", anschliessend "ls -a" sowie dann "ls dirname". Ist wohl nicht der Sinn der Sache, oder? ;)
     
  8. Nergal

    Nergal Grünschnabel

    Dabei seit:
    31.01.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Keine Angst, das waere wirklich nicht Sinn der Sache ;).
    Ich meine das ganze rein im Bezug auf die Wildcards in Eigennamen (z.B. von Dateinamen, Verzeichnisnamen, oder Textstrings in Suchabfragen). Die Abarbeitung von Parametern sollte dabei nach wie vor komplett geschehen. Das heisst beim Abarbeiten von von "ls -l -a dirname" wird genau einmal das Kommando "ls" angewendet, und zwar auf den Ordner "dirname" und mit den Parametern "-l -a".

    Bei einer Eingabe von z.B. "ls -l -a dirname*" wuerde dann zuerst vom Interpreter festgestellt werden, wieviele Verzeichnisse in die Abfrage fallen. Gibt es also die Verzeichnisse "dirname1", "dirname2" und "dirname3", dann werden die drei Strings in eine Liste geschrieben. Danach wird das Kommando "ls -l -a" auf jedes Element der Liste einmal angewendet, so dass der Inhalt aller drei Verzeichnisse ausgegeben wird.

    Ich hoffe ich konnte die Idee etwas verstaendlicher machen.
     
  9. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Du willst also eine intelligente Shell, die die Optionen eines Befehls/Programms erkennt?

    Ich nenn mal noch ein paar Beispiele, bei denen diese intelligente Shell Probleme hätte:

    Code:
    diff file1 file2
    cat file1 file2 > file
    find . -name "muster*"
    
    Am find-Befehl sieht man, dass Optionen mannigfaltig aussehen können. Woher weiss die Shell, dass "muster*" zur Option gehört und nicht von der Shell ausgewertet werden soll. Und jeder, der schonmal ein Programm/Skript mit Parametern geschrieben hat, würde mit dieser intelligenten Shell seine Probleme haben.

    Sehe es mal so, auf der einen Seite bist Du genötigt, einen for-Einzeiler zu schreiben, auf der anderen Seite verliert die Shell viel von ihrer Flexibilität.

    Gruss, Phorus
     
  10. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Die Interpretation von wildcards etc. wird in der bash-documentation sehr ausfuehrlich erklaert ('info bash'). Die Argumente werden von der bash nich "abgearbeitet", sondern expandiert. Es liegt also kein dynamischer Prozess vor, der Befehl bekommt einen String zugewiesen, _nachdem_ bash ihn interpretiert hat.
     
  11. #10 Nergal, 01.02.2006
    Zuletzt bearbeitet: 01.02.2006
    Nergal

    Nergal Grünschnabel

    Dabei seit:
    31.01.2006
    Beiträge:
    9
    Zustimmungen:
    0
    @rikola
    Ich verwende ksh, aber prinzipiell ist es da nich anders als bei bash. Im Grunde genommen ist mein Problem durch deinen Tip ja auch schon mittels einer sehr einfach Variante geloest.

    Alles weitere ist rein hypothetischer Natur, da ich weder bash noch die ksh aendern wollen wuerde, geschweige denn so einfach koennte.

    Wie gesagt, fuer mich waere es intuitiver den Interpreter anders aufzubauen. Da sich die Entwickler jedoch sehr wahrscheinlich um einiges mehr an Gedanken gemacht haben, als ich in meiner Fruehstueckspause ;) , geht es mir vor allem darum zu verstehen, welche Probleme eine Auslegung nach meinem Vorschlag mit sich bringen wuerde. Wie gesagt, rein hypothetisch.

    @Phorus
    Bei dem diff Beispiel wuerde ich keine Probleme sehen, bei cat eventuell, aber bei find hast du in der Form sicherlich recht. 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. Stattdessen wuerde bei z.B. 10 Treffern zehnmal der find Befehl mit den angegebenen Paramentern, aber je fuer ein anderes Verzeichnis augefuehrt werden. Das Ergebnis muesste dabei qualitativ dem von "muster*" sein.

    Ich hoffe ich habe mich nicht zu kompliziert ausgedrueckt.

    Ich freue mich weiterhin ueber jede Antwort!
     
  12. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Du kannst doch die Wildcards mit einem \ versehen, dann werden sie nicht interpretiert. Oder Du bettest sie in Einzelhochkammata, dann werden sie ebenfalls nicht interpretiert ( ls '*' ). Ich kenne kein Programm ausser den Shells, dass wildcards interpretiert. Wenn Du etwas 10x separat ausfuehren moechtest, benutzt Du einfach eine for- oder while-Schleife. Vielleicht kann die sh schon alles, was Du suchst, und Du musst Dich nur noch ein bisschen mit ihr vertraut machen.
     
  13. #12 Xanti, 01.02.2006
    Zuletzt bearbeitet: 01.02.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hmm der find-Befehl war nicht so clever gewählt, da durch die "" um muster* verhindert wird, dass die Shell diese Wildcard auswertet. Das Beispiel "diff file1 file2" zeigt besser, dass mehrere File/Dir-Namen als Parameter manchmal vonnöten sind, weil "diff file1 file2" nunmal nicht gleich "diff file1" und "diff file2" ist.

    Gruss, Phorus

    edit:

    find, perl... ;)
     
  14. Nergal

    Nergal Grünschnabel

    Dabei seit:
    31.01.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Hmm, ich fuerchte wir reden immer noch etwas aneinander vorbei. Mir ging es nie darum, dass jeweils nur ein Parameter ausgewertet wird. Da das Beispiel "diff file1 file2" keine Wildcards enthaelt wuerde es natuerlich so wie immer ausgewertet werden. Und auch mit Wildcards wuerde diff immer mit zwei File/Dir-Namen aufgerufen werden. Nur eben quasi als Batch mehrmals hintereinander mit wechselnden File/Dir-Namen.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Du möchtest also, dass die Shell den Parameter-Syntax jedes Befehls/Programmes kennt? ;)
     
  17. Nergal

    Nergal Grünschnabel

    Dabei seit:
    31.01.2006
    Beiträge:
    9
    Zustimmungen:
    0
    Nein. Die Shell ist schon darauf angewiesen, dass der Benutzer den richtigen Syntax verwendet.
    Das ganze setzt vorraus, dass die Shell Wildcards mit Datei-/Verzeichnisnamen verknuepft. Also wenn in einem String ein Wildcard auftaucht, dann interpretiert die Shell den String als Verzeichnis oder Dateinamen. Dafuer ist es fuer die Shell erstmal uninteressant, welchen Syntax das letztendliche Kommando erwartet.
     
Thema:

wildcards unter HP-UX

Die Seite wird geladen...

wildcards unter HP-UX - Ähnliche Themen

  1. Erweiterte Forum Suchfunktionen (Unterstützung von Wildcards/Quotes)

    Erweiterte Forum Suchfunktionen (Unterstützung von Wildcards/Quotes): Hallo, Es wird ja "gelegentlich" auf die Suchfunktion vom Forum verwiesen. Daran ist im Grunde auch nichts auszusetzen. Aber leider ist die...
  2. Shell Wildcards Bug?

    Shell Wildcards Bug?: Hallo, ich wollte grade mit der Shell Dateien kopieren lassen, die nur mit einem Großbuchstaben beginnen. Also (jaja, mit ls kann man nicht...
  3. awstats - wildcards

    awstats - wildcards: hallo an alle, ich habe mir gerade awstats heruntergeladen und installiert. aber ich habe blasen auf meinem hirn und verstehe nicht, wie...
  4. die bash, find und die wildcards

    die bash, find und die wildcards: hi... ich bin neu an der bash, deswegen habt rücksicht :D mein problem ist folgendes: ich habe ein kleines skript, indem ich die ausgabe...
  5. unzip mit wildcards

    unzip mit wildcards: vielleicht bin ich einfach blöd aber unzip *.zip geht nicht da kommt dann => ---------- caution: filename not matched: sicdwgpg.zip caution:...