exit und ERRORLEVEL

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.
Torsten Mohr [ So, 20 Mai 2007 18:25 ] [ ID #1716104 ]

Re: exit und ERRORLEVEL

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
Frank Seitz [ So, 20 Mai 2007 19:09 ] [ ID #1716105 ]

Re: exit und ERRORLEVEL

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.
Torsten Mohr [ So, 20 Mai 2007 19:50 ] [ ID #1716106 ]

Re: exit und ERRORLEVEL

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
Frank Seitz [ So, 20 Mai 2007 20:11 ] [ ID #1716107 ]

Re: exit und ERRORLEVEL

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.
Torsten Mohr [ So, 20 Mai 2007 20:35 ] [ ID #1716108 ]

Re: exit und ERRORLEVEL

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
Peter Velan [ Mo, 21 Mai 2007 08:37 ] [ ID #1716670 ]

Re: exit und ERRORLEVEL

Hallo Torsten

Torsten Mohr schrieb:
> Hallo,
>
> ich vermute das Problem eher auf der Windows-Seite, aber vielleicht
> ist das ja falsch und es liegt doch an Perl.
>
> Im B=C3=BCro werden unsere PCs und die Perl-Installationen von unserer
> IT-Abteilung gepflegt und sind gr=C3=B6=C3=9Ftenteils 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=C3=BChre
> 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=C3=BCck mit
ActiveState Perl 5.8.7.


> Ich w=C3=BCrde das Problem jetzt eher auf der Seite von DOS vermuten,
> w=C3=BCrde momentan aber auch Perl nicht ausschlie=C3=9Fen.
>

Benutzt Du jetzt DOS oder Windows?

[...]


Sch=C3=B6nen Gru=C3=9F aus dem Bergischen Land
Robert
Robert Berghaus [ Mo, 21 Mai 2007 15:39 ] [ ID #1716676 ]

Re: exit und ERRORLEVEL

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.
Torsten Mohr [ Mo, 21 Mai 2007 16:37 ] [ ID #1716677 ]

Re: exit und ERRORLEVEL

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:

[at] rem = '--*-Perl-*--
[at] 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
[at] 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
Andreas Puerzer [ Mo, 21 Mai 2007 17:58 ] [ ID #1716678 ]

Re: exit und ERRORLEVEL

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.
Torsten Mohr [ Mo, 21 Mai 2007 18:16 ] [ ID #1716679 ]

Re: exit und ERRORLEVEL

Hallo Torsten

Torsten Mohr schrieb:
> Hallo,
>
> erstmal danke f=C3=BCrs Ausprobieren.
>
>>> Ein Kollege bekommt "I was called" und 9009.
>>>
>> Ich habe es unter Win2000 ausprobiert und bekomme 34 zur=C3=BCck mit
>> ActiveState Perl 5.8.7.
>>
>>
>>> Ich w=C3=BCrde das Problem jetzt eher auf der Seite von DOS vermuten,=

>>> w=C3=BCrde momentan aber auch Perl nicht ausschlie=C3=9Fen.
>>>
>> 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=C3=B6glich, unter Win2000 DOS-Programme zu starten, die werden
dann aber im DOS Subsystem gestartet. Es ist sogar m=C3=B6glich von
hier aus 16Bit OS2 Textmodus Programme zu starten und da kann man
nun wirklich nicht mehr DOS zu sagen. :-)


Sch=C3=B6nen Gru=C3=9F aus dem Bergischen Land
Robert
Robert Berghaus [ Di, 22 Mai 2007 13:04 ] [ ID #1718912 ]

Re: exit und ERRORLEVEL

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.
Torsten Mohr [ Do, 24 Mai 2007 21:48 ] [ ID #1722665 ]
Perl » de.comp.lang.perl.misc » exit und ERRORLEVEL

Vorheriges Thema: Perl Tk Fonts
Nächstes Thema: Perl Tk (WIN) NoteBook