Kezdőoldal » Számítástechnika » Programozás » Hogyan tudom a bash-ban...

Ozmium42 kérdése:

Hogyan tudom a bash-ban "érzékelni" és kezelni, hogy egy C-ben írt programot a fordítónak sikerült-e lefordítania?

Figyelt kérdés
A scriptem jelenleg lefordítja a megadott forráskódot, majd a futtatható fájlt elindítja. Ha elsőre nem sikerül a fordítás, nyilván nem jön létre a futtatható fájl. Viszont ha volt egy előző működő verzió, akkor a fordító hibaüzenete után azt újra lefuttatja. Ezért szeretnék beleírni valami hibakezelést, hogy ezt elkerüljem. Ha nem sikerül a fordítás, akkor ne csináljon semmit azután, ha pedig sikerül, csak akkor futtassa (a felülírt) fájlt.
2017. dec. 22. 22:12
 1/10 anonim ***** válasza:
60%

Egyik lehetőség, hogy egy egyszerű if-be teszed. Pl.:


if parancs then

2017. dec. 22. 22:26
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
82%

Elküldte hamarabb, tehát:


if parancs then

siker

else

hiba

fi


Egyébként a $? változóban találod a legutóbbi parancs hibakódját, ezt is lehet nézni.

2017. dec. 22. 22:27
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:
Feltételezem, hogy GCC-vel fordítasz. A GCC exit code-ja 0, ha a fordítás sikerült.
2017. dec. 23. 00:10
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:
A 2. válasz alapján sikerült megcsinálnom, amit akartam, viszont nem értem az if-es részt. Ha a GCC kódja siker esetén 0, akkor miért teljesül az if, és ellenkező esetben miért nem? Hogyan lehet közvetlen(ebb)ül hozzáférni ahhoz az exit code-hoz?
2017. dec. 23. 00:38
 5/10 anonim ***** válasza:

Példa:

[link]

a gcc 0-val tér vissza, ha sikeres a fordítás, ha nem, akkor mással.


Ez fogjuk el a bash szkriptben a $? változóval, ennek 0-val való egyenlőségét vizsgáljuk:

[link]

2017. dec. 23. 01:26
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:

#4: Ha sikeresen lefordul, akkor az exit status változó ($?) értéke 0 lesz.

Az if feltételnél -eq operátorral tudod összehasonlítani, hogy a változó értéke egyenlő-e 0-val (mint számmal).

2017. dec. 23. 01:30
Hasznos számodra ez a válasz?
 7/10 A kérdező kommentje:

De most úgy van megírva, mint a 2. hozzászólásban, és működik.


if gcc filename.c -o filename.exe

then ...


Ez így mit tesztel, hogy lefordulás esetén true lesz, hiba esetén pedig nem?

2017. dec. 23. 11:28
 8/10 anonim ***** válasza:

#7: így van, sikeres fordítás esetén az exit status 0 vagyis true lesz, ellenkező esetben meg más "nem nulla" szám, azaz false.


idézet a bash kézikönyvéből:

"EXIT STATUS


Shell builtin commands return a status of 0 (true) if successful, and non-zero (false) if an error occurs while they execute. All builtins return an exit status of 2 to indicate incorrect usage."

Forrás: "man bash" parancs illetve [link]

2017. dec. 23. 12:12
Hasznos számodra ez a válasz?
 9/10 A kérdező kommentje:
Wow. Szóval a shellben 0 a logikai True, és "nemnulla" a logikai False? Fordítva, mint minden más nyelvben?
2017. dec. 23. 12:54
 10/10 anonim ***** válasza:

Ne keverjük össze a kettőt.


A shellnél az exit statusnál van a 0-hoz true hozzárendelve és minden máshoz false:

[link]


A programozási nyelvek meg konvertálnak a különböző típusok között. Így lehet a 0-ból False a 10-ből True.


A bash meg nem konvertál - lásd az alábbi példát:

[link]

ezért:

[link]

2017. dec. 23. 13:31
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!