Discussion:
exit und ERRORLEVEL
(zu alt für eine Antwort)
Torsten Mohr
2007-05-20 16:25:15 UTC
Permalink
Hallo,

ich vermute das Problem eher auf der Windows-Seite, aber vielleicht
ist das ja falsch und es liegt doch an Perl.

Im Büro werden unsere PCs und die Perl-Installationen von unserer
IT-Abteilung gepflegt und sind größtenteils gleich.

Folgendes Perl-Skript:
print "I was called";
exit 34;

Und folgende Batch-Datei exittest.bat:
perl testscript.pl
echo %ERRORLEVEL%

Wenn ich die Batchdatei exittest.bat auf meinem Rechner ausführe
bekomme ich die Ausgabe "I was called" und den Wert 34.

Ein Kollege bekommt "I was called" und 9009.


Ich würde das Problem jetzt eher auf der Seite von DOS vermuten,
würde momentan aber auch Perl nicht ausschließen.


Kann mir jemand das Verhalten erklären oder einen Workaround
nennen? Oder beschreiben wie ich das Problem weiter eingrenzen
kann?


Danke für Tips,
Torsten.
Frank Seitz
2007-05-20 17:09:16 UTC
Permalink
Post by Torsten Mohr
print "I was called";
exit 34;
perl testscript.pl
echo %ERRORLEVEL%
Batch-Programmierung unter DOS/Windows. Mein Beileid.
Post by Torsten Mohr
Kann mir jemand das Verhalten erklären oder einen Workaround
nennen? Oder beschreiben wie ich das Problem weiter eingrenzen
kann?
Hast Du mal andere Exitcodes ausprobiert?
Was meint ein anderes Skript, wie der Exitcode lautet?

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Torsten Mohr
2007-05-20 17:50:20 UTC
Permalink
Hallo,
Post by Frank Seitz
Post by Torsten Mohr
print "I was called";
exit 34;
perl testscript.pl
echo %ERRORLEVEL%
Batch-Programmierung unter DOS/Windows. Mein Beileid.
Danke, ich weiß das zu schätzen.
Post by Frank Seitz
Post by Torsten Mohr
Kann mir jemand das Verhalten erklären oder einen Workaround
nennen? Oder beschreiben wie ich das Problem weiter eingrenzen
kann?
Hast Du mal andere Exitcodes ausprobiert?
Ja, auf meinem Rechner kommt das was ich erwarte, beim Kollegen
immer 9009.
Post by Frank Seitz
Was meint ein anderes Skript, wie der Exitcode lautet?
Ich bin mir nicht ganz sicher wie Du das meinst, einen anderen
Namen für das Skript und/oder die Batch-Datei?
Ich meine daß das mit dem 'print "I was called\n";' als Problem
ausgeschlossen ist. Oder habe ich das falsch verstanden?


Grüße,
Torsten.
Frank Seitz
2007-05-20 18:11:49 UTC
Permalink
Post by Torsten Mohr
Post by Frank Seitz
Hast Du mal andere Exitcodes ausprobiert?
Ja, auf meinem Rechner kommt das was ich erwarte, beim Kollegen
immer 9009.
Dann spielt es also keine Rolle, welcher Exitcode
bei exit() angegeben wird?
Post by Torsten Mohr
Post by Frank Seitz
Was meint ein anderes Skript, wie der Exitcode lautet?
Ich bin mir nicht ganz sicher wie Du das meinst, einen anderen
Namen für das Skript und/oder die Batch-Datei?
Nein, ich meinte: das Skript von einem anderen Skript
aus via system() starten und den Exitcode dort auswerten.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Torsten Mohr
2007-05-20 18:35:58 UTC
Permalink
Hallo,
Post by Frank Seitz
Dann spielt es also keine Rolle, welcher Exitcode
bei exit() angegeben wird?
Ja, andere Werte habe ich ausprobiert. Bei mir klappts,
beim Kollegen 9009.
Post by Frank Seitz
Nein, ich meinte: das Skript von einem anderen Skript
aus via system() starten und den Exitcode dort auswerten.
Ach so, das hat natürlich Sinn. Das probier ich mal.


Grüße,
Torsten.
Peter Velan
2007-05-21 06:37:17 UTC
Permalink
Post by Torsten Mohr
Post by Frank Seitz
Dann spielt es also keine Rolle, welcher Exitcode
bei exit() angegeben wird?
Ja, andere Werte habe ich ausprobiert. Bei mir klappts,
beim Kollegen 9009.
aus der ActivePerl Doku:

| exit EXPR
| exit
|
| Evaluates EXPR and exits immediately with that value. ...
| See also die ...

und für 'die':

| die LIST
|
| Outside an eval, prints the value of LIST to STDERR and exits with
| the current value of $! (errno). If $! is 0, exits with the value
| of ($? >> 8) (backtick `command` status). If ($? >> 8) is 0,
| exits with 255. ...

'9009 >> 8' ist /fast/ 34; Hmm, irgendwie seltsam, aber vielleicht doch
ein Ansatz.

Gruß,
Peter
Robert Berghaus
2007-05-21 13:39:42 UTC
Permalink
Hallo Torsten
Post by Torsten Mohr
Hallo,
ich vermute das Problem eher auf der Windows-Seite, aber vielleicht
ist das ja falsch und es liegt doch an Perl.
Im Büro werden unsere PCs und die Perl-Installationen von unserer
IT-Abteilung gepflegt und sind größtenteils gleich.
print "I was called";
exit 34;
perl testscript.pl
echo %ERRORLEVEL%
Wenn ich die Batchdatei exittest.bat auf meinem Rechner ausführe
bekomme ich die Ausgabe "I was called" und den Wert 34.
Ein Kollege bekommt "I was called" und 9009.
Ich habe es unter Win2000 ausprobiert und bekomme 34 zurück mit
ActiveState Perl 5.8.7.
Post by Torsten Mohr
Ich würde das Problem jetzt eher auf der Seite von DOS vermuten,
würde momentan aber auch Perl nicht ausschließen.
Benutzt Du jetzt DOS oder Windows?

[...]


Schönen Gruß aus dem Bergischen Land
Robert
Torsten Mohr
2007-05-21 14:37:21 UTC
Permalink
Hallo,

erstmal danke fürs Ausprobieren.
Post by Robert Berghaus
Post by Torsten Mohr
Ein Kollege bekommt "I was called" und 9009.
Ich habe es unter Win2000 ausprobiert und bekomme 34 zurück mit
ActiveState Perl 5.8.7.
Post by Torsten Mohr
Ich würde das Problem jetzt eher auf der Seite von DOS vermuten,
würde momentan aber auch Perl nicht ausschließen.
Benutzt Du jetzt DOS oder Windows?
Ja, das war ungenau. Wir verwenden beide die DOS-Box unter
Windows 2000. Das Perl ist 5.8.6 oder 5.8.7, bin mir momentan
nicht ganz sicher.


Grüße,
Torsten.
Robert Berghaus
2007-05-22 11:04:43 UTC
Permalink
Hallo Torsten
Post by Torsten Mohr
Hallo,
erstmal danke fürs Ausprobieren.
Post by Robert Berghaus
Post by Torsten Mohr
Ein Kollege bekommt "I was called" und 9009.
Ich habe es unter Win2000 ausprobiert und bekomme 34 zurück mit
ActiveState Perl 5.8.7.
Post by Torsten Mohr
Ich würde das Problem jetzt eher auf der Seite von DOS vermuten,
würde momentan aber auch Perl nicht ausschließen.
Benutzt Du jetzt DOS oder Windows?
Ja, das war ungenau. Wir verwenden beide die DOS-Box unter
Windows 2000. Das Perl ist 5.8.6 oder 5.8.7, bin mir momentan
nicht ganz sicher.
Welche DOS-Box? Wenn Du die Befehlszeile meinst (die ich auch
immer zum Starten benutze), so ist das Win2000 und nicht DOS. Es
ist möglich, unter Win2000 DOS-Programme zu starten, die werden
dann aber im DOS Subsystem gestartet. Es ist sogar möglich von
hier aus 16Bit OS2 Textmodus Programme zu starten und da kann man
nun wirklich nicht mehr DOS zu sagen. :-)


Schönen Gruß aus dem Bergischen Land
Robert
Andreas Pürzer
2007-05-21 15:58:13 UTC
Permalink
Post by Torsten Mohr
Hallo,
print "I was called";
exit 34;
perl testscript.pl
echo %ERRORLEVEL%
Wenn ich die Batchdatei exittest.bat auf meinem Rechner ausführe
bekomme ich die Ausgabe "I was called" und den Wert 34.
Ein Kollege bekommt "I was called" und 9009.
Bekommt dein Kollege wirklich "I was called" ???
Laut dem ERRORLEVEL hätte ich jetzt eher ne Fehlermeldung erwartet...

Normalerweise steht 9009 für einen nicht gefundenen Befehl.
Leider fehlt mir gerade der Link zur Dokumentation, aber pl2bat macht
z.B. folgendes aus deinem Skript:

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S %0 %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
#!perl
#line 15
print "I was called";
exit 34;

__END__
:endofperl

Deswegen muß ich jetzt nochmal fragen, weil ich mir das nicht erklären kann:
Bekommt dein Kollege wirklich "I was called" ???

Viele Grüße,
Andreas Pürzer
--
Have Fun,
and if you can't have fun,
have someone else's fun.
The Beautiful South
Torsten Mohr
2007-05-21 16:16:38 UTC
Permalink
Hallo,
Post by Andreas Pürzer
Bekommt dein Kollege wirklich "I was called" ???
Laut dem ERRORLEVEL hätte ich jetzt eher ne Fehlermeldung erwartet...
ich überprüfe das morgen noch einmal, danke für den Tip.
Post by Andreas Pürzer
Normalerweise steht 9009 für einen nicht gefundenen Befehl.
Leider fehlt mir gerade der Link zur Dokumentation, aber pl2bat macht
...
Post by Andreas Pürzer
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
Ok, das läßt wirklich vermuten daß der Pfad nicht stimmt.


Grüße,
Torsten.
Torsten Mohr
2007-05-24 19:48:03 UTC
Permalink
Hallo,
Post by Torsten Mohr
perl testscript.pl
echo %ERRORLEVEL%
in der Batch-Datei hatte ich nicht "perl testscript.pl" geschrieben
sondern nur "testsxript.pl".

Auf dem Rechner meines Kollegen war die Endung .pl nicht mit
dem Perl-Interpreter assoziiert sondern mit einem Editor.

Warum es trotzdem auch ausgeführt wurde ist mir noch nicht klar,
aber das ist auch nicht mehr so wichtig.


Viele Grüße,
Torsten.

Loading...