Poistumiskoodi bash-komentosarjan lopussa

Olen hämmentynyt bash-komentosarjan lopussa olevan poistumiskoodin merkityksestä: tiedän kyseisen poistumiskoodin 0 tarkoittaa, että se valmistui onnistuneesti ja että poistumiskoodinumeroita on paljon enemmän (127 jos en ole väärässä?)

Kysymykseni koskee, kun näen poistumiskoodin 0 komentosarjan lopussa, se pakottaa poistumiskoodin 0: ksi, vaikka komentosarja epäonnistui tai onko sillä muuta merkitystä?

Kommentit

  • Jos komentosarja päättyy exit 0, se poistuu poistumiskoodilla 0 riippumatta siitä, mitä komentosarjassa tapahtuu.
  • @Hatclock miksi ei ' t lähetätkö vastauksensi täyden lupauksen? kommenttina en voi merkitä sitä, enkä usko ' usko, että saisit väärät Internet-pisteet vastaamiseen (eikö?) Vain ajatus. .. (kiitos nopeasta vastauksesta)
  • Olen ' m puhelimellani rautatieasemalla, en ei todellakaan halua kirjoittaa liikaa puhelimeeni. ilkkachulla näyttää kuitenkin olevan hyvä vastaus!
  • @Hatclock Ei, ei lainkaan. Jos komentosarja päättyy exit 0, se poistuu koodilla 0 vain, jos viimeinen käsky suoritettiin. Ainoa vaikutus exit 0 -ohjelmaan komentosarjan lopussa on palauttaa 0 edellisen käskyn tilan sijaan.
  • @Gilles Se oli enemmän epäselvää. sanamuotoinen vastaus. Jos komentosarja suorittaa exit 0 jossain vaiheessa, se palauttaa poistumiskoodin 0 riippumatta siitä, mitä on tapahtunut ennen sitä.

Vastaa

Sisäänrakennettu komento exit poistuu kuoresta (mistä Bash ”s viite ):

exit [n]
Poistu kuoresta ja palauta n-tila Jos n jätetään pois, poistumistila on viimeksi suoritetun komennon tila. Kaikki EXIT: n ansat suoritetaan ennen kuoren päättymistä.

Tiedoston loppuun suorittaminen myös poistuu, palauttamalla viimeisen komennon palautuskoodin, joten kyllä, lopullinen exit 0 tekee komentosarjan poistumisesta onnistuneen riippumatta (eli olettaen, että komentosarja saavuttaa viimeisen exit.) Komentosarjan lopussa voit käyttää myös komentoa true tai saadaksesi nollan poistumiskoodin.

Tietenkin useammin” exit käytetään lopettaaksesi komentosarjan keskellä.

Näiden tulisi tulostaa 1 ($? sisältää edellisen komennon palauttaman poistumiskoodin) :

sh -c "false" ; echo $? sh -c "false; exit" ; echo $? 

Tämän pitäisi tulostaa 0:

sh -c "false; exit 0" ; echo $? 

En ”ole” varma onko skriptin käsite ”epäonnistunut” exit suoritettaessa järkevää, koska on täysin mahdollista, että jotkut komentosarjan suorittamat komennot epäonnistuvat, mutta komentosarja itse onnistuu . Komentosarjan kirjoittaja voi päättää, mikä on menestys ja mikä ei.

Lisäksi lähtökoodien vakioalue on 0..255. Yli 127: n koodeja kuori käyttää osoittamaan signaalilla päättyvän prosessin, mutta ne voidaan palauttaa tavallisella tavalla. wait -järjestelmäkutsu palauttaa laajemman arvon, loput sisältävät käyttöjärjestelmän asettamat tilabitit.

Kommentit

  • Siisti, en tiennyt ' tiennyt 8-bittisistä poistumiskoodien numeroinnista. Kiitos!
  • Huomaa, että kun prosessi tapetaan, se ei poistu poistumiskoodilla > 127. Se ' s vain, että jotkut kuoret asettavat $? -arvoksi 128 + signum siinä tapauksessa. Katso yksityiskohtia kohdasta Oletusarvoinen poistumiskoodi, kun prosessi lopetetaan? .
  • exit 0 palaa vain 0, jos poistuminen suoritetaan. (se voi poistua toisella reitillä).

Vastaus

0 tarkoittaa menestystä, positiiviset kokonaisluvut epäonnistumista. Erilaisia virhekoodeja on 255, mutta arvot 126 ja sitä pidemmät varataan osoittamaan, että ohjelmaa ei voitu käynnistää (126 tai 127) tai se tapettiin signaalilla (vähintään 129). Katso Oletusarvoinen poistumiskoodi, kun prosessi lopetetaan? ja Mitä paluu / poistumisarvoja voin käyttää bash-funktioissa / komentosarjoissa? saadaksesi lisätietoja.

Shell-komentosarjan poistumistila on viimeisen komentosarjan suorittaman komennon exit-tila. Esimerkiksi

#!/bin/sh somecommand 

palauttaa somecommand: n poistumistila, kun taas

#!/bin/sh somecommand exit 0 

palauttaa 0 riippumatta siitä, mikä somecommand palasi.Tämä toinen komentosarja voidaan myös kirjoittaa

#!/bin/sh somecommand true 

exit 0 sijoittaminen komentosarjan loppuun ei välttämättä aiheuta Palauttaa sen 0. Tämä palauttaa sen vasta, kun komentosarjan loppu on saavutettu. Esimerkiksi seuraava komento palauttaa aina arvon 3:

#!/bin/sh exit 3 exit 0 

seuraava komentosarja palauttaa myös virhekoodin syntaksivirheestä viestin lisäksi:

#!/bin/sh } exit 0 

Seuraava komentosarja palauttaa joko 1 tai 0 riippuen sen ensimmäinen argumentti:

#!/bin/sh if [ "$1" = "foo" ]; then exit 1 fi exit 0 

Seuraava komentosarja palauttaa tilan somecommand, koska set -e saa komentosarjan poistumaan, jos somecommand epäonnistuu:

#!/bin/sh set -e somecommand exit 0 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *