exit und ERRORLEVEL

exit und ERRORLEVEL

am 20.05.2007 18:25:15 von 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.

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.

Re: exit und ERRORLEVEL

am 20.05.2007 19:09:16 von Frank Seitz

Torsten Mohr wrote:

> Folgendes Perl-Skript:
> print "I was called";
> exit 34;
>
> Und folgende Batch-Datei exittest.bat:
> perl testscript.pl
> echo %ERRORLEVEL%

Batch-Programmierung unter DOS/Windows. Mein Beileid.

> 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

Re: exit und ERRORLEVEL

am 20.05.2007 19:50:20 von Torsten Mohr

Hallo,

>> Folgendes Perl-Skript:
>> print "I was called";
>> exit 34;
>>
>> Und folgende Batch-Datei exittest.bat:
>> perl testscript.pl
>> echo %ERRORLEVEL%
>
> Batch-Programmierung unter DOS/Windows. Mein Beileid.

Danke, ich weiß das zu schätzen.

>> 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.

> 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.

Re: exit und ERRORLEVEL

am 20.05.2007 20:11:49 von Frank Seitz

Torsten Mohr wrote:

>>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?

>>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

Re: exit und ERRORLEVEL

am 20.05.2007 20:35:58 von Torsten Mohr

Hallo,

> Dann spielt es also keine Rolle, welcher Exitcode
> bei exit() angegeben wird?

Ja, andere Werte habe ich ausprobiert. Bei mir klappts,
beim Kollegen 9009.

> 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.

Re: exit und ERRORLEVEL

am 21.05.2007 08:37:17 von Peter Velan

am 20.05.2007 20:35 schrieb Torsten Mohr:
>> 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

Re: exit und ERRORLEVEL

am 21.05.2007 15:39:42 von Robert Berghaus

Hallo Torsten

Torsten Mohr schrieb:
> Hallo,
>=20
> ich vermute das Problem eher auf der Windows-Seite, aber vielleicht
> ist das ja falsch und es liegt doch an Perl.
>=20
> Im Büro werden unsere PCs und die Perl-Installationen von unserer
> IT-Abteilung gepflegt und sind größtenteils gleich.
>=20
> Folgendes Perl-Skript:
> print "I was called";
> exit 34;
>=20
> Und folgende Batch-Datei exittest.bat:
> perl testscript.pl
> echo %ERRORLEVEL%
>=20
> Wenn ich die Batchdatei exittest.bat auf meinem Rechner ausführe
> bekomme ich die Ausgabe "I was called" und den Wert 34.
>=20
> Ein Kollege bekommt "I was called" und 9009.
>=20

Ich habe es unter Win2000 ausprobiert und bekomme 34 zurück mit=20
ActiveState Perl 5.8.7.


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

Benutzt Du jetzt DOS oder Windows?

[...]


Schönen Gruß aus dem Bergischen Land
Robert

Re: exit und ERRORLEVEL

am 21.05.2007 16:37:21 von Torsten Mohr

Hallo,

erstmal danke fürs Ausprobieren.

>> 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.
>
>
>> 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.

Re: exit und ERRORLEVEL

am 21.05.2007 17:58:13 von Andreas Puerzer

Torsten Mohr schrieb:

> Hallo,

>
> 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.
>

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

Re: exit und ERRORLEVEL

am 21.05.2007 18:16:38 von Torsten Mohr

Hallo,

> 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.

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

Re: exit und ERRORLEVEL

am 22.05.2007 13:04:43 von Robert Berghaus

Hallo Torsten

Torsten Mohr schrieb:
> Hallo,
>=20
> erstmal danke fürs Ausprobieren.
>=20
>>> 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.
>>
>>
>>> 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?
>=20
> 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=20
immer zum Starten benutze), so ist das Win2000 und nicht DOS. Es=20
ist möglich, unter Win2000 DOS-Programme zu starten, die werden=20
dann aber im DOS Subsystem gestartet. Es ist sogar möglich von=20
hier aus 16Bit OS2 Textmodus Programme zu starten und da kann man=20
nun wirklich nicht mehr DOS zu sagen. :-)


Schönen Gruß aus dem Bergischen Land
Robert

Re: exit und ERRORLEVEL

am 24.05.2007 21:48:03 von Torsten Mohr

Hallo,

> Und folgende Batch-Datei exittest.bat:
> 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.