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 [ - 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: 7718 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: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: 7718 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 [ - 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: 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: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. |