Kilépési kód egy bash szkript végén

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

  • Ha egy szkript exit 0, kilép a 0 kilépési kóddal, függetlenül attól, hogy mi történik a szkriptben.
  • @Hatclock miért nem ' t a válaszodra elzálogosított választ teszel közzé? Megjegyzésként nem tudom megjelölni, és nem gondolom, hogy hamis internetpontokat kapnál a válaszadáshoz (igaz?) Csak egy gondolat. .. (köszönet a gyors válaszért)
  • I ' m a vasútállomáson a telefonomon, nem nem igazán szereti, ha túl sokat gépelek a telefonomra. Úgy tűnik, hogy az ilkkachunak jó válasza van!
  • @Hatclock Nem, egyáltalán nem. Ha egy szkript 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.
  • @Gilles Ez inkább kétértelmű volt. megfogalmazott válasz részemről. Ha egy szkript a 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.

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 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük