Hallo,
Wo gibt es den Posix-Standard im Web? Auf ieee.org stand nur was von $$, aber ich hätte das gern etwas kostenloser.
Es geht darum, Augabe und Fehler in Shells zu unterdrücken und abhängig vom Rückgabewert einen Text auszugeben. In Bash macht man das so:
unknownprog 2>/dev/null && echo "juhuu" || echo "mist, nicht installiert"
Wenn der Interpreter nun aber /bin/sh ist, funktioniert das obige dann mit allen Posix-kompatiblen (oder besser -konformen) Shells?
Josef Spillner
On Wed Sep 19, 2001 at 21:54:04 +0200, Josef Spillner wrote:
Wo gibt es den Posix-Standard im Web? Auf ieee.org stand nur was von $$, aber ich hätte das gern etwas kostenloser.
Da bist Du nicht alleine...
Es geht darum, Augabe und Fehler in Shells zu unterdrücken und abhängig vom Rückgabewert einen Text auszugeben. In Bash macht man das so:
unknownprog 2>/dev/null && echo "juhuu" || echo "mist, nicht installiert"
unknownprog 2>/dev/null 1>&2 && echo juhuu || echo mist
Willst Du wissen, ob's das Programm gibt und willst Du es ausfuehren um den Rueckgabewert zu checken?
Wenn der Interpreter nun aber /bin/sh ist, funktioniert das obige dann mit allen Posix-kompatiblen (oder besser -konformen) Shells?
Sollte. Aber wie waere es einfach mit ausprobieren?
Adam
On Wednesday 19 September 2001 22:56, Adam Lackorzynski wrote:
Willst Du wissen, ob's das Programm gibt und willst Du es ausfuehren um den Rueckgabewert zu checken?
Es soll in manche postinst-Dateien rein von Paketen, die keine Dependency auf unsere Tools haben wollen/können. Für den Fall, daß die Tools da sind, sollen die mit den Paketen installierten Konfigurationsdateien geparst und alle relevanten Informationen in eine zentrale Registry (nein, nicht wie bei Windows) geschrieben werden, und es wäre ja Unfug wenn jedes Paket diese Routinen bereitstellen (und in einem synchronisierten Zustand halten) müßte. Da aber die Pakete an sich diese Informationen nicht brauchen, gibt's auch keinen "Depends: xxx" Eintrag.
Josef Spillner
Am Donnerstag, dem 20. September 2001 um 13:28:03, schrieb Josef Spillner:
Es soll in manche postinst-Dateien rein von Paketen, die keine Dependency auf unsere Tools haben wollen/können. Für den Fall, daß die Tools da sind, sollen die mit den Paketen installierten Konfigurationsdateien geparst und alle relevanten Informationen in eine zentrale Registry (nein, nicht wie bei Windows) geschrieben werden, und es wäre ja Unfug wenn jedes Paket diese Routinen bereitstellen (und in einem synchronisierten Zustand halten) müßte.
In diesem Fall wird der Pfad zum tool bekannt sein und es reicht ein:
test -x /usr/bin/tool && tool
Eventuell ist noch ein cron-Job pro Paket sinnvoll, falls das Tool spaeter erst nachinstalliert wird.
Torsten
On Wed, Sep 19, 2001 at 09:54:04PM +0200, Josef Spillner wrote:
Es geht darum, Augabe und Fehler in Shells zu unterdrücken und abhängig vom Rückgabewert einen Text auszugeben. In Bash macht man das so:
unknownprog 2>/dev/null && echo "juhuu" || echo "mist, nicht installiert"
Wenn der Interpreter nun aber /bin/sh ist, funktioniert das obige dann mit allen Posix-kompatiblen (oder besser -konformen) Shells?
Bei Shellscripten kenne ich folgende Faustregel: Wenn es mit ash funktioniert sollte es in andern auch funktionieren.
Bei der Bash gibt es das Flag "posix".
HTH
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Wednesday 19 September 2001 21:54, Josef Spillner wrote:
Wo gibt es den Posix-Standard im Web? Auf ieee.org stand nur was von $$, aber ich hätte das gern etwas kostenloser.
RMS hat AFAIK zwar den Namen "POSIX" erfunden aber leider nicht die Regeln nach denen dieser Standard verteilt wird.
Es geht darum, Augabe und Fehler in Shells zu unterdrücken und abhängig vom Rückgabewert einen Text auszugeben. In Bash macht man das so:
unknownprog 2>/dev/null && echo "juhuu" || echo "mist, nicht installiert"
probier mal "which unknownprog" das führt das Programm im Falle des Findens nicht aus. Problem: die Ausgabe sieht auf allen Systemen anders aus: Linux gibt entweder den Pfad oder gar nix aus, HP-SUX sagt "program xyz not found in /bin /usr/bin .....".
Oder Du probierst es so: for prog in `echo $PATH|tr : ' '` ; do if test -x $prog && echo found ; done
(Syntaxkorrekturen überlasse ich den anwesenden Studenten als Übungsaufgabe.)
Konrad
- -- There is an order of things in this universe. -- Apollo, "Who Mourns for Adonais?" stardate 3468.1
On Thu, Sep 20, 2001 at 07:19:02AM +0200, Konrad Rosenbaum wrote:
probier mal "which unknownprog" das führt das Programm im Falle des Findens
which finde ich doof, weil es sowohl bei Erfolg als auch bei Mißerfolg 0 zurückliefert. Da müßte man also wirklich die Zeichenkette analysieren und das will man nicht.
nicht aus. Problem: die Ausgabe sieht auf allen Systemen anders aus: Linux gibt entweder den Pfad oder gar nix aus, HP-SUX sagt "program xyz not found in /bin /usr/bin .....".
Oder Du probierst es so: for prog in `echo $PATH|tr : ' '` ; do if test -x $prog && echo found ; done
Ich habe das immer so gemacht:
Test auf genau ein Programm mit bekanntem Pfad
[ -x $PROG ] && echo ja || echo nein
Test auf Programm in $PATH
hash 2>/dev/null $PROG && echo ja || echo nein
Das klappt weil bei linux /bin/sh 'hash' als builtin hat und sowas wie Solaris und Irix ein Extratool /usr/bin/hash. Auf meinem linux gibts kein externes hash - ist also auch nicht so die Superlösung falls jemand ash als /bin/sh auf linux hat.
Reinhard
On Thursday 20 September 2001 07:19, Konrad Rosenbaum wrote:
RMS hat AFAIK zwar den Namen "POSIX" erfunden aber leider nicht die Regeln nach denen dieser Standard verteilt wird.
Wie kann es dann ein Standard sein, wenn er nicht frei zugänglich ist :(
Oder Du probierst es so: for prog in `echo $PATH|tr : ' '` ; do if test -x $prog && echo found ; done
Ich glaube das könnte Probleme geben wenn die Version falsch ist. Andererseits kann man dann 3 Rückgabwerte haben: - nicht gefunden, ignoriert - gefunden und fehlgeschlagen, ignoriert - gefunden und erfolgreich, registriert
Josef Spillner
Am Donnerstag, dem 20. September 2001 um 13:21:29, schrieb Josef Spillner:
Wie kann es dann ein Standard sein, wenn er nicht frei zugänglich ist :(
Nicht einmal Gesetzestexte sind frei zugaenglich, obwohl auch der aermste Sozialhilfeempfaenger verpflichtet ist, diese einzuhalten.
Zum eigentlichen Problem:
test -f /`which kommando` && echo ja || echo nein
Torsten
Josef Spillner dr_maux@maux.de writes:
Wie kann es dann ein Standard sein, wenn er nicht frei zugänglich ist :(
Die Idee, daß man einfach so ohne Kosten an Standards rankommen muß, ist eine recht neue (siehe auch aktuelle c't: "Open Source").
Normen werden von den jeweiligen nationalen oder internationalen Normierungsgremien erstellt. Diese finanzieren sich (zumindest teilweise) durch den Verkauf der entstandenen Normen.
Der Begriff "Standard" wird meist etwas weiter gefaßt und ist nicht auf die staatlich autorisierten Standardisierungsgremien beschränkt. Das beschert uns solche sinnfreien Schöpfungen wie "Industriestandard", bloß weil Intel und Microsoft mal irgendwas zusammengegurkt haben.
Und was im Deutschen Norm heißt, heißt im Englischen auch bloß Standard, vgl. DIN und ANSI.
Zu deinem konkreten Problem: In der Standardisierungsphase waren einige POSIX-Entwürfe relativ weit verfügbar. Damit konnten viele Leute die Entwürfe lesen und so zum Standardisierungsprozeß beitragen.
Kurioserweise sind diese Entwürfe mit Verabschiedung der Standards nicht von den FTP-Servern verschwunden und liegen z.B. unter ftp://ftp.inf.tu-dresden.de/documentation/standards/posix/ rum.
Sven
lug-dd@mailman.schlittermann.de