Pause GNU in einer Windows-Konsole vor, wenn ein Fehler auftritt
Frage
Ein Teil der Installation für eine App ich verantwortlich bin, kompiliert einige C-Code-Bibliotheken. Dies wird in einer Konsole mit GNU Make.
So, als Teil der Installation, ein Konsolenfenster aufspringt, sehen Sie die Dateiausgabe wiz make durch, wie es kompiliert und Links, wenn das Konsolenfenster beendet wird geschlossen, und das Installationsprogramm wird fortgesetzt.
Alles war gut, es sei denn es einen Übersetzungsfehler ist. Dann wird die Make-Datei Fehler aus und das Konsolenfenster schließen, bevor Sie eine Chance haben, um herauszufinden, was passiert ist.
Also, was ich möchte geschehen ist das Konsolenfenster Pause haben mit ‚eine Taste drücken, um fortzufahren‘ Typ-Funktionalität, wenn es einen Fehler von der Make-Datei ist so, dass die Konsole geöffnet bleibt. Ansonsten genauso normal verlassen und die Konsole schließen.
Ich kann nicht arbeiten, wie dies in einer GNU Makefile zu tun, oder aus einer Batch-Datei, die das Make laufen konnte.
Lösung
Dies sollte den Trick tun:
if not ERRORLEVEL 0 pause
Typ help if
in DOS für weitere Informationen auf Errorlevel Nutzung.
Andere Tipps
Dies ist, was Sie suchen:
if ERRORLEVEL 1 pause
Wenn Sie geben
HELP IF
Sie erhalten diese Info: Error-Nummer | Gibt einen wahren Zustand, wenn der letzte Programmlauf einen Exit-Code zurückgegeben gleich oder größer als die Nummer angegeben ist.
Mit diesem einfachen C-Programm, um den Exit-Code zu manipulieren:
#include <stdio.h>
main(int argc, char *argv[]) {
if (argc == 2) {
// return integer of argument 1
return strtol(argv[1], NULL, 10);
}
else {
return 0;
}
}
Wir testen den Exit-Code in einer Batch-Datei wie folgt:
test.exe 0
IF ERRORLEVEL 0 PAUSE
Bedingung : 0 => 0 == TRUE
Wenn ERRORLEVEL = 0
, wird die Pause auftreten, da die Logik >=
oder Größer-als-oder-gleich . Dies ist wichtig, da es nicht sofort klar ist, dass die Bedingung nicht ein ==
Vergleich ist.
Beachten Sie, dass für 1 => 0
subsituting auch wahr sein, und damit auch die Pause auftreten. Dies gilt für jede positive Zahl ist.
Wir können den gegenteiligen Effekt auslösen nur von unten 0
gehen:
test.exe -1
IF ERRORLEVEL 0 PAUSE
Bedingung : -1 => 0 == FALSE
Da ein ERRORLEVEL
von 1
typischerweise bedeutet, dass es ein Fehler ist, und 0
keinen Fehler, wir können nur die minimale Erhöhung der Vergleichsbedingung zu bekommen, was wir wollen, wie so:
test.exe 0
IF ERRORLEVEL 1 PAUSE
Bedingung : -1 => 1 == FALSE
Bedingung : 0 => 1 == FALSE
Bedingung : 1 => 1 == TRUE
In diesem Beispiel. das Skript wird anhalten, wenn ERRORLEVEL
1
oder höher
Beachten Sie, dass diese -1
Exit-Codes die gleiche wie 0
ermöglicht. Was passiert, wenn man nur pausieren will 0
nicht? Wir können eine separate Syntax verwenden:
test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE
Bedingung : -1 != 0 == TRUE
Bedingung : 0 != 0 == FALSE
Bedingung : 1 != 0 == TRUE
In diesem Beispiel pausiert das Skript, wenn %ERRORLEVEL%
nicht 0
ist Wir können dies tun, indem Sie den EQU-Operator zunächst zu prüfen, ob %ERRORLEVEL% EQU 0
, dann wird der NOT-Operator die entgegengesetzte Wirkung, das entspricht den !=
Betreiber zu bekommen. Aber ich glaube, das funktioniert nur auf NT-Maschinen, nicht pures DOS.
Referenzen:
http: / /chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html
Haben Sie versucht, die 'Pause' Befehl?
@echo off
echo hello world
pause
- Weitere Informationen über 'Pause': http://technet.microsoft. com / en-us / library / bb490965.aspx
- DOS-Befehlszeilenreferenz AZ: http://technet.microsoft.com /en-us/library/bb490890.aspx