amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Gerät angemeldet oder nicht? (Shellskript) [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

17.03.2003, 14:49 Uhr

Bladerunner
Posts: 1474
Nutzer
Tjo ich würde gerne innerhalb eines Skripts überprüfen, ob ein gerät, z.B
eine PC Floppy bereits angemeldet ist, oder nicht.
Zunächst habe ich gedacht, der Weg über if exists sei ein guter, leider
geht das nicht, weil scheinbar nur die Existenz von ganzen Verzeichnissen oder Dateien überprüft
wird, nicht aber das Gerät an sich. Irgendwelche ideen?
--
Amiga
It's more than just a name :dance1:

[ - Antworten - Zitieren - Direktlink - ]

17.03.2003, 15:10 Uhr

Solar
Posts: 3680
Nutzer
Hmmm... die Ausgabe von "info" durchsuchen?

(Brute force, ich weiß, aber ich habe mein DOS-Handbuch nicht dabei...)

[ - Antworten - Zitieren - Direktlink - ]

17.03.2003, 15:47 Uhr

Palgucker
Posts: 1342
Nutzer
Hab gerade was "zusammengestrunkelt". Scheint aber zu funktionieren.

Assign Exists CD0: >Nil:
If Exists $RC
echo "Device ist vorhanden"
Else
echo "Kann Device nicht finden"
Endif

[ - Antworten - Zitieren - Direktlink - ]

17.03.2003, 17:55 Uhr

thomas
Posts: 7716
Nutzer

If Exists $RC

Was soll das denn bringen ? Die Zeile muß so lauten:

if warn
echo "ist nicht angemeldet"
else
echo "gibbet schon"
endif

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

17.03.2003, 18:46 Uhr

Palgucker
Posts: 1342
Nutzer
@ thomas

If Exists $RC
Was soll das denn bringen ?


Bei mir ist in $RC der rerturncode von assign enthalten.
entweder 0 wenn gut oder 5 wenn nichts gefunden wird.

Ist das schlimm?

[ - Antworten - Zitieren - Direktlink - ]

17.03.2003, 20:17 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Palgucker:
@ thomas

If Exists $RC
Was soll das denn bringen ?


Bei mir ist in $RC der rerturncode von assign enthalten.
entweder 0 wenn gut oder 5 wenn nichts gefunden wird.

Ist das schlimm?

Ich weiß nicht; wenn Du vorher eine Datei namens 0 oder 5 anlegst, dann funktioniert die If-Anweisung ja tatsächlich.
Allerdings läßt der Sinn trotzdem zu wünschen übrig.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 01:39 Uhr

Palgucker
Posts: 1342
Nutzer
ja, bin ich denn allein im Weltraum? Wieso funktoniert das nur bei mir?
Habe nochmal einiges unter die Lupe genommen, und dieses Script erfüllt
bei mir voll und ganz seinen zweck. Mit Snoopdos - es wird keine Datei
Namens 0 oder 5 gesucht. Sie existieren aber. 0 ist nur ein clip aus
Clipboards, den ich vorm Rücksetzen einfach mal nach Sys: gezerrt habe
und 5 in Fonts:DPaint. Das kann es ja wohl nicht sein.
Habe das ganze auch in Arexx probiert. Das selbe Ergebnis. In Arexx sah
das ganze wie folgt aus:

Address Command "Assign Exists CD0: >Nil:"
say RC

Ergebnis>: 0

Address Command "Assign Exists CD1: >Nil:" /* CD1: existiert nicht! */
say RC

Ergebnis:> 5

Das selbe Ergebnis, wenn ich im Shellscript nach der Zeile assign...
Echo $RC einfüge und über Shell das Script ausführe. Ich habe übrigens
das Script mehrfach getestet, bevor ich es gepostet habe. Da wundert es mich
schon, wenn die nächsten 2 Antworten die paar Zeilen behandeln, als wäre
es vom "wilden Vodoomann gebastelt", oder was weiss ich?
Na egal, es sage jedenfalls keiner, DOS ist langweilig. ;)

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 10:02 Uhr

Flinx
Posts: 1073
Nutzer
In deinem Skript siehst Du aber nur nach, ob es RC gibt und interessierst Dich nicht für dessen Inhalt. Das ist schon etwas fragwürdig.

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 10:06 Uhr

thomas
Posts: 7716
Nutzer

Selbstverständlich enthält $rc den Return-Code. Darum geht es ja nicht. Es geht um das Exists. Das prüft, ob eine Datei dieses Namens existiert. Wenn du unbedingt auf $RC bestehst, dann mach es so:

if $rc eq 0
echo "return code ist null"
endif

Das Einsatzgebiet für exists ist ungefähr so:

if exists sys:wbstartup/miami
echo "miami wird beim hochfahren gestartet"
endif

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 10:16 Uhr

Solar
Posts: 3680
Nutzer
@ Palgucker:

Schon richtig - ein Erfolg ist (bei AmigaDOS) üblicherweise ein Returncode von 0, ein Mißerfolg 5, 10 oder 20.

Trotzdem ist es üblich, in Skripten auf "If WARN" zu testen, nicht auf "If $RC = 5" oder gar "If Exists $RC". Ein Fehlercode darf nämlich durchaus auch 6, 12 oder 42 sein...

Nur weil's funktioniert, heißt das noch nicht, das es richtig ist. ;-)

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 13:21 Uhr

Bladerunner
Posts: 1474
Nutzer
Danke jedenfalls für die Vorschläge, mit if warn klappt das auch so wie es soll ;)
--
Amiga
It's more than just a name :dance1:

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 14:30 Uhr

Palgucker
Posts: 1342
Nutzer
@ thomas

Jetzt hab ich Dich verstanden, hatte mir mehr Sorgen gemacht, das $RC
der Stein des Anstosses ist.
Also "If exists" nur auf Dateipfade anwenden. Hätte ich z.B. "If $RC"
geschrieben, könnte man das gelten lassen. Mit dem Zusatz "EQ n" könnte
man dann noch spezielle Returncodes behandeln.
Aber warum schreibst Du,Die Zeile muß so lauten:, muß sie nicht,

Gib es zu! ;)

@ Flinx

In deinem Skript siehst Du aber nur nach, ob es RC gibt und interessierst Dich nicht
für dessen Inhalt. Das ist schon etwas fragwürdig.


Ich ahne, das Du jetzt falsch liegst. Dieses Script prüft nicht, ob es einen
RC gibt, oder nicht, sondern wertet sehr wohl den Inhalt von RC aus. Das
selbe macht auch If warn - nicht mehr und nicht weniger.

@ Solar
Ein Fehlercode darf nämlich durchaus auch 6, 12 oder 42 sein...
Da hast Du warscheinlich die falsche Zeile aus diesem "Scriptvorschlagsgewimmel" im Kopf.
Mein Script prüft nicht, ob 0 oder 5, sondern ob 0 oder >0. Also werden von
mir aus auch 6, 12 oder 42 einfach nur als Fehler bewertet.

Nur weil's funktioniert, heißt das noch nicht, das es richtig ist

Das trifft wohl den Nagel auf den Kopf.

Also verspreche ich hiermit allen Beteiligten, nie wieder Exists für die
Auswertung von Returncodes zu missbrauchen.

Nie, nie, nie! ;)

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 14:55 Uhr

Solar
Posts: 3680
Nutzer
Zitat:
Original von Palgucker:
Mein Script prüft nicht, ob 0 oder 5, sondern ob 0 oder >0. Also werden von mir aus auch 6, 12 oder 42 einfach nur als Fehler bewertet.


Ich mag mich jetzt irren - AmigaDOS ist für mich schon ein paar Jährchen her - aber waren Werte < 5 nicht noch als Erfolg zu werten (WARN => 5 oder höher)?

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 15:45 Uhr

Palgucker
Posts: 1342
Nutzer
@ Solar
Da irrst Du nicht. Hab ich gleich mal ausprobiert und If warn reagiert
erst ab RC 5 und grösser. Gibts also doch einen Unterschied zu if RC,
das ja schon ab RC 1 "Feurio ruft".

[ - Antworten - Zitieren - Direktlink - ]

18.03.2003, 20:07 Uhr

Flinx
Posts: 1073
Nutzer
"Ich ahne, das Du jetzt falsch liegst."

Wohl kaum.

"Dieses Script prüft nicht, ob es einen
RC gibt, oder nicht, sondern wertet sehr wohl den Inhalt von RC aus."

So?

"if Exists $RC"

Wie soll es das damit wohl machen?

[ - Antworten - Zitieren - Direktlink - ]

19.03.2003, 01:08 Uhr

Palgucker
Posts: 1342
Nutzer
@ Flinx
Wie soll es das damit wohl machen?
Genau das war die Frage, die ich Dir auch nicht beantworten konnte.
Dabei war die Lösung recht einfach.
Holger schrieb gestern:
Ich weiß nicht; wenn Du vorher eine Datei namens 0 oder 5 anlegst,
dann funktioniert die If-Anweisung ja tatsächlich.
Allerdings läßt der Sinn trotzdem zu wünschen übrig.

Und genau da liegt der Hund begraben. Ich habe, wie ich dann auch schrieb,
eine Datei Namens 0 in Sys:. Und wäre ich nicht gestern gerade von einer
Geburtstagsfeier gekommen, hätte ich Holgers Worte vielleicht auch richtig
gedeutet. Aber so nahm die Sache ihren Lauf...

Dieses Script wertet schon den Inhalt von $RC aus, nur ganz anderst,
alls ich mir das vorstellte.
Ist das Device vorhanden, gibt assign einen RC von 0 weiter und if exists $rc
prüft, ob Datei Namens 0 existiert. Die wurde bei mir ja auch immer gefunden.
Im Gegensatz dazu wird eine Datei 5 nicht gefunden. Und so kam es, das
das sein oder nichtsein der Devices sich immer mit den Scriptausgaben
deckte, auch wenn die Methode doch recht "hahnebüchen" ist.
Da wundert's mich auch nicht mehr, das thomas wohl die Hände übern Kopf
zusammengeschlagen hat.

Naja, so ist auch dieser Thread "dank" meines Mörderscripts etwas länger
geworden, und ich hoffe, keinem die Nerven geraubt zu haben.


[ - Antworten - Zitieren - Direktlink - ]

19.03.2003, 08:56 Uhr

Solar
Posts: 3680
Nutzer
Mitnichten.

Eine Frage interessiert mich bzgl. "If $RC" jetzt aber doch - ich bin bei sowas ja ein bißchen paranoid:

Was passiert, wenn $RC - jetzt nicht durch einen Befehlsaufruf, sondern allgemein - explizit auf "0" gesetzt wird - schlägt "If $RC" dann an (weill $RC definiert ist, und zwar als "0"), oder nicht (weil ein "0" als false interpretiert wird)?

Da gibt's eine nette parallele zum C/C++-Präprozessor und #ifdef - der funktioniert nämlich auch anders, als sich manch einer das vorstellt. ;-)

[ - Antworten - Zitieren - Direktlink - ]

19.03.2003, 09:17 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Solar:
Was passiert, wenn $RC - jetzt nicht durch einen Befehlsaufruf, sondern allgemein - explizit auf "0" gesetzt wird - schlägt "If $RC" dann an (weill $RC definiert ist, und zwar als "0"), oder nicht (weil ein "0" als false interpretiert wird)?

Wie willst Du RC setzen?
Das setzen einer Variablen ist ein Befehl, und nach der Ausführung des Befehls wird RC wieder auf den Erfolgsstatus des Befehls gesetzt.
Somit kann man RC nicht explizit setzen.
Natürlich hast Du mit Deiner Paranoia trotzdem Recht. RC ist immer definiert, bei Erfolg nur eben mit dem Wert 0.
"If $RC" funktioniert deshalb auch nicht. Man muß schon den Zahlenwert auswerten, entweder mit EQ/GT/GE oder eben mit WARN/ERROR/FAIL.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Gerät angemeldet oder nicht? (Shellskript) [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.