Jeg har bash-skript som dette:
rm ~/sqoop/"$TABLE"/* rmdir ~/sqoop/"$TABLE" return $?
Etter utførelsen av dette skriptet returnerer den en verdi til neste prosess, men selv om skriptet kjøres vellykket og utførelsen av alle trinn i skriptet er fullført, returnerer den 1.
Fordi dette – neste prosess finner ikke sted.
Hvis jeg fjerner returoppgaven, går neste prosess greit. dette problemet kom etter Hadoop-klyngen opp gradering som har Ubuntu 14 og ny klynge har Ubuntu 16.
Kan du hjelpe oss med å forstå hva som er problemet og hvordan neste prosess kjører vellykket hvis du fjerner returkommandoen her og hva er innvirkning på produksjonen hvis du fjerner Return-setningen?
Kommentarer
- hva er neste trinn? hva nøyaktig sjekker neste trinn?
- Det neste er HQL (hive-spørring i Hadoop) og det har noen forretningstrinn det kjører hvis jeg kommenterer returverdien det fungerer bra, men ikke kjører hvis kommentar komme tilbake. jeg har ' t endrer noe på forretningslogikk / shell-skript, det eneste vi hadde gjort er å oppgradere
Svar
return
-uttrykket returnerer en feil hvis utsagnet ikke kjøres fra en funksjon.
I skallfunksjoner, bruk return
. I skript bruker du exit
.
Et kort skript som
#!/bin/bash return 0
vil produsere feilmelding
line 1: return: can only `return" from a function or sourced script
og den vil sette $?
til 1.
Hvis du ikke «t avslutter skriptet med en eksplisitt exit
(eller hvis du avslutter med exit
men uten å spesifisere en utgangskode), returkoden til skriptet som helhet vil være det samme som den sist utførte kommandoen.
Å ha exit "$?"
er det samme som vanlig exit
, og hvis det står på slutten av skriptet, kan dette utelates helt.
Generelt foreslår jeg også at du bruker $HOME
i stedet for tilde i skript. Dette er fordi $HOME
fungerer som alle andre variabler, mens tilde utvides i et eget utvidelsestrinn, noe som betyr at den ikke oppfører seg som en variabel, og at den ikke utvides i siterte strenger . $HOME
er også mer beskrivende, og siden det er et skript, kan du bruke noen ekstra tastetrykk for å gjøre koden mer lesbar.
Kommentarer
- Jeg har en rask forespørsel over svaret ditt..Jeg vil prøve over med eksisterer 0, men jeg har ett spørsmål hvorfor dette problemet skjer nå bare før jeg bruker samme spørsmål? det fungerer hvis jeg kommenterer tilbake uttalelse er dette innvirkning noen ting?
- @gsrao Hvis du kommenterer
return
uttalelsen, vil returkoden til skriptet være den for den sist utførte kommandoen, så i ditt tilfelle her, kan du definitivt utelate det. Jeg vil legge til dette i svaret mitt. - Å..godt ..du redder livet mitt, så saken min hvis jeg kommenterer returen som standard skriptet vil returnere den siste kommentaren vellykket flagg (rmdir ~ / sqoop / " $ TABLE ") ikke sant? .. her selv om svaret ditt fungerer meg hvis to enkle spørsmål som spiser hjernen min 1) saken min hva er bruk av " returnerer $? " som du sa det vil fungere som det samme hvis jeg kommenterer " returnerer $ " 2) hva kan være mulig som forårsaker problemet tidligere til nå?
- @gsrao Ja, hvis du kommenterer
return
(som ikke skal ' ikke være der til å begynne med siden den ' ikke er i en funksjon, så vidt jeg kan se ), vil utgangsstatusen for skriptet være den forrmdir
, hvis den ' er den siste kommandoen i skriptet. Når det gjelder ditt siste spørsmål, forstår jeg ikke ' hva du mener med " problemet tidligere til nå ". - Mitt siste spørsmål..Jeg bruker samme skript som jeg har brukt før linux / cluster up gradering det fungerte til cluster up gradation, hvorfor nå bare dette problemet skjer? hva kan være årsaken til dette problemet?