Pozastavit GNU Udělat v konzoli Windows, pokud dojde k chybě

hlasů
5

Součástí instalace pro aplikaci Jsem zodpovědný za sestavuje některé C kód knihovny. To se provádí v konzole pomocí GNU Vytvořit.

Tak, jako součást instalace, okno konzole objeví otevřené, uvidíte make výstupní soubor Wiz tím, jak to zkompiluje a odkazy, když skončil okna konzoly se zavře a instalační program pokračuje.

Všechny dobré, pokud dojde k chybě kompilace. Pak make souborů chyby ven a okna konzoly zavře, než budete mít možnost zjistit, co se děje.

Takže, co bych chtěl, aby se stalo, je mít pauzu okno konzola s ‚stisknout klávesu pro pokračování‘ funkčnost typu, pokud dojde k chybě z makefile tak, aby konzoly zůstane otevřený. V opačném případě stačí ukončit jako normální a zavřete konzolu.

Nemohu vymyslet, jak to udělat v GNU Makefile nebo z dávkového souboru, který by mohl spustit Značka.

Položena 18/09/2008 v 10:43
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
9

to by mělo stačit:

if not ERRORLEVEL 0 pause

typu help ifDOS pro více informací o použití ERRORLEVEL.

Odpovězeno 18/09/2008 v 10:45
zdroj uživatelem

hlasů
2

To je to, co hledáte:

if ERRORLEVEL 1 pause

Pokud zadáte

HELP IF

dostanete toto info: číslo ERRORLEVEL | Určuje pravdivou podmínku, pokud je poslední běh programu vrátil kód ukončení je rovna nebo větší než číslo zadané.

Odpovězeno 21/10/2011 v 14:47
zdroj uživatelem

hlasů
0

Použitím tohoto jednoduchého C program pro manipulaci s návratový kód:

#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;
    }
}

Můžeme testovat kód ukončení v dávkovém souboru jako tak:

test.exe 0
IF ERRORLEVEL 0 PAUSE

podmínka :0 => 0 == TRUE

Když ERRORLEVEL = 0se nastane pauza, protože logika >=nebo větší než nebo rovno . To je důležité, protože to není hned jasné, že podmínka není ==srovnání.

Všimněte si, že subsituting pro 1 => 0bude také pravda, a tím dojde i pauzy. To platí pro jakékoli kladné číslo.

Můžeme vyvolat opačný efekt pouze tím, že jde níže 0:

test.exe -1
IF ERRORLEVEL 0 PAUSE

podmínka :-1 => 0 == FALSE

Vzhledem k tomu, ERRORLEVELze 1obvykle znamená, že se jedná o chybu, a 0žádná chyba, můžeme jen zvýšit minimálně ve stavu srovnávání dostat to, co chceme jako tak:

test.exe 0
IF ERRORLEVEL 1 PAUSE

podmínka :-1 => 1 == FALSE

podmínka :0 => 1 == FALSE

podmínka :1 => 1 == TRUE

V tomto příkladu. skript se pozastaví, když ERRORLEVELje 1nebo vyšší

Všimněte si, že to umožňuje -1kódy ukončení stejné jako 0. Co když někdo chce jen 0, aby nezastavil? Můžeme použít samostatný syntaxi:

test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE

podmínka :-1 != 0 == TRUE

podmínka :0 != 0 == FALSE

podmínka :1 != 0 == TRUE

V tomto příkladu je skript pozastaví, pokud %ERRORLEVEL%není 0Můžeme to udělat pomocí operátoru EQU nejprve zkontrolovat, zda %ERRORLEVEL% EQU 0, pak operátor NOT dostat opačný účinek, což odpovídá !=provozovatel. Věřím však, že to funguje pouze na NT strojích, nikoli prostý DOS.

Reference:

http://chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html

Odpovězeno 10/12/2016 v 21:26
zdroj uživatelem

hlasů
0

Už jste vyzkoušeli příkaz ‚pause‘?

@echo off
echo hello world
pause
Odpovězeno 18/09/2008 v 11:01
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more