Zavarban vagyok a bash szkript végén található kilépőkód jelentésétől: tudom, hogy a kilépési kód A 0 azt jelenti, hogy sikeresen befejeződött, és hogy sokkal több kilépőkód-szám van (127, ha nem tévedek?)
A kérdésem az, hogy mikor látom a 0-os kilépési kódot egy szkript végén, akkor is 0-ként kényszeríti a kilépési kódot, ha a szkript nem sikerült, vagy van más jelentése?
Megjegyzések
Válasz
A beépített exit
parancs kilép a shellből ( Bash “s hivatkozás ):
exit [n]
Lépjen ki a héjból, n állapotot ad vissza a shell szülőjéhez. Ha n el van hagyva, akkor a kilépési állapot az utoljára végrehajtott parancsé. Az EXIT minden csapdáját a shell lejárta előtt hajtják végre.
A fájl végéig futás szintén kilép, az utolsó parancs visszatérési kódjának visszaküldésével, tehát igen, a végső exit 0
a szkript kilépését sikeres állapotba hozza, függetlenül a az előző parancsok. (Vagyis feltételezve, hogy a szkript eléri a végső exit
.) A szkript végén használhatja a true
vagy nulla kilépési kód megszerzéséhez.
Természetesen gyakrabban exit
-t használ egy a szkript közepének befejezéséhez.
Ezeknek ki kell nyomtatniuk az 1-et ($?
tartalmazza az előző parancs által visszaadott kilépési kódot) :
sh -c "false" ; echo $? sh -c "false; exit" ; echo $?
Bár ennek 0-t kell nyomtatnia:
sh -c "false; exit 0" ; echo $?
Én nem biztos, hogy a exit
végrehajtásakor a szkript koncepciója “meghibásodik”, van-e értelme, mivel teljesen lehetséges, hogy a parancsfájl által futtatott egyes parancsok kudarcot vallanak, de maga a szkript is sikeres . A szkript írójának kell eldöntenie, hogy mi a siker és mi nem.
Emellett a kilépési kódok szokásos tartománya 0..255. A 127 feletti kódokat a héj jelzéssel befejezett folyamat jelzésére használja, de a szokásos módon visszaküldhetők. A wait
rendszerhívás valójában szélesebb értéket ad vissza, a többi pedig az operációs rendszer által beállított állapotbiteket tartalmazza.
Megjegyzések
- Nagyszerű, nem tudtam ' nem tudtam a 8 bites kilépési kódok számozásáról. Köszönöm!
- Ne feledje, hogy amikor egy folyamat le van ölve, akkor nem lép ki egy > 127. kilépési kóddal. Ez ' s csak annyi, hogy egyes héjak
$?
-et ebben az esetben 128 + signum-ra állítják. A részletekért lásd: Alapértelmezett kilépési kód, amikor a folyamat leáll? . -
exit 0
csak akkor tér vissza 0, ha a kilépés végrehajtásra kerül. (más útvonalon léphet ki).
Válasz
0 sikert jelent, a pozitív egész szám kudarcot jelent. 255 különböző hibakód létezik, de a 126-os és annál magasabb értékek fenntartva jelzik, hogy egy program nem tudott elindulni (126 vagy 127), vagy egy jel (129-nél magasabb) ölte meg. Lásd: Alapértelmezett kilépési kód, amikor a folyamat leáll? és Milyen visszatérési / kilépési értékeket használhatok a bash függvényekben / szkriptekben? további információért.
A shell parancsfájl kilépési állapota az utolsó parancs kilépési állapota, amelyet a szkript végrehajtott. Például
#!/bin/sh somecommand
visszatér a somecommand
kilépési állapota, míg a
#!/bin/sh somecommand exit 0
0 értéket ad vissza, függetlenül attól, hogy somecommand
visszatért.Ez a második szkript is írható
#!/bin/sh somecommand true
A exit 0
beírása egy szkript végére nem feltétlenül okoz 0-ra tér vissza. Ez csak akkor adja vissza a 0 értéket, amikor a szkript vége eléri. Például a következő szkript mindig 3-at ad vissza:
#!/bin/sh exit 3 exit 0
a következő szkript szintén mindig hibakódot ad vissza, a szintaxis hibáról szóló üzenet megjelenítésén kívül:
#!/bin/sh } exit 0
A következő szkript 1-vel vagy 0-val tér vissza, annak függvényében első argumentum:
#!/bin/sh if [ "$1" = "foo" ]; then exit 1 fi exit 0
A következő parancsfájl visszaadja somecommand
állapotát, mivel set -e
a parancsfájl kilépését okozza, ha a somecommand
nem sikerül:
#!/bin/sh set -e somecommand exit 0
exit 0
, kilép a 0 kilépési kóddal, függetlenül attól, hogy mi történik a szkriptben.exit 0
számmal végződik, akkor csak akkor lép ki a 0 kóddal, ha az utolsó utasítást végrehajtották. A szkript végén találhatóexit 0
egyetlen hatása az, hogy az előző utasítás állapota helyett 0-t ad vissza.exit 0
parancsot bármikor futtatja, akkor a 0 kilépési kódot adja vissza, függetlenül attól, hogy mi történt előtte.