Palautusarvovirhe bash-skripteissä

Minulla on tällainen bash-komentosarja:

rm ~/sqoop/"$TABLE"/* rmdir ~/sqoop/"$TABLE" return $? 

Suorituksen jälkeen tämä komentosarja palauttaa arvon seuraavaan prosessiin, mutta vaikka komentosarja suoritetaan onnistuneesti ja suoritetaan kaikki komentosarjan vaiheet onnistuneesti, se palauttaa 1.

Koska tätä – seuraavaa prosessia ei tapahdu. / p>

Jos poistan palautuslausekkeen, seuraava prosessi sujuu sujuvasti. tämä ongelma tuli sen jälkeen, kun Hadoop-klusteri oli porrastettu, jossa Ubuntu 14: llä ja uudella klusterilla on Ubuntu 16.

Voitteko auttaa meitä ymmärtämään ongelman ja miten seuraava prosessi toimii onnistuneesti, jos poistat palautuskomennon tässä ja mitä vaikutusta tuotantoon tapahtuu, jos Return-lause poistetaan?

Kommentit

  • mikä on seuraava vaihe? mitä tarkalleen seuraava askel tarkistaa?
  • Seuraava on HQL (Hive-kysely Hive) ja sillä on joitain liiketoiminnan vaiheita, jos se kommentoi palautusarvoa, joka toimii hyvin, mutta ei toimi, jos kommentoi palata. minulla on ' t muuta mitään liiketoimintalogiikassa / shell-komentosarjassa, ainoa asia, jonka olimme tehneet, on päivitys

Vastaus

Lauseke return palauttaa virheen, jos käskyä ei suoriteta toiminnosta.

Shell-funktioissa käytä return. Käytä komentosarjoissa exit.

Lyhyt komentosarja, kuten

#!/bin/bash return 0 

, tuottaa virhesanoma

line 1: return: can only `return" from a function or sourced script 

ja se asettaa $? arvoksi 1.

Jos et ”t poistu komentosarjasta nimenomaisella exit -toiminnolla (tai jos poistut exit -toiminnolla, mutta et määritä poistumiskoodia), komentosarja kokonaisuudessaan on sama kuin viimeksi suoritettu komento.

exit "$?" on sama kuin tavallinen exit, ja jos se on komentosarjan lopussa, se voidaan jättää kokonaan pois.


Ehdotan myös, että käytät $HOME eikä tilde komentosarjoissa. Tämä johtuu siitä, että $HOME toimii kuten mikä tahansa muu muuttuja, kun taas tilde laajennetaan erillisessä laajennusvaiheessa, mikä tarkoittaa, että se ei toimi muuttujana eikä sitä ole laajennettu lainausmerkeissä . $HOME on myös kuvailevampi, ja koska se on komentosarja, voit käyttää muutaman ylimääräisen näppäimen painalluksen koodin luettavuuden parantamiseksi.

Kommentit

  • Minulla on nopea kysely vastauksesi yläpuolella … yritän yllä olevaa olemassa olevalla 0: lla, mutta minulla on yksi kysely, miksi tämä ongelma tapahtuu nyt, käytän vain ennalta, käytän samaa kyselyä? se toimii, jos kommentoin palata onko tämä vaikutus mikään asia?
  • @gsrao Jos kommentoit return -lausetta, komentosarjan palautuskoodi on viimeksi suoritetun komennon koodi, joten tässä tapauksessa voit jättää sen ehdottomasti pois. Lisän tämän vastaukseeni.
  • Voi … suuri .. sinä pelastat henkeni, joten minun tapaukseni, jos kommentoin palautusta oletuksena skripti palauttaa viimeisen kommentin onnistuneen lipun (rmdir ~ / sqoop / " $ TABLE ") eikö? minua, jos kaksi yksinkertaista kyselyä, jotka syövät aivoni 1) minun tapauksessani mikä on " return $? " kuten sanoit, se toimii samalla tavalla, jos kommentoin " return $ " 2) mikä saattaa olla mahdollista aiheuttaa ongelman aikaisemmin?
  • @gsrao Kyllä, jos kommentoit return (jonka ei pitäisi ' olla alussa, koska se ' ei ole toiminnossa, sikäli kuin näen ), komentosarjan poistumistila on rmdir -tilan, jos se ' on komentosarjan viimeinen komento. Mitä tulee viimeiseen kysymykseesi, en ymmärrä oikein ' en tarkalleen mitä tarkoitat " kysymyksellä aikaisemmin tähän mennessä ".
  • Viimeinen kysymykseni.. käytän samaa komentosarjaa, jota olen käyttänyt ennen linux / cluster up gradationia, se toimi, kunnes cluster up gradation, miksi nyt vain tämä ongelma tapahtuu? mikä voi aiheuttaa tämän ongelman?

Vastaa

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