Returvärdefel i bash-skript

Jag har bash-skript så här:

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

Efter körning av detta skript returnerar det ett värde till nästa process men även om skriptet körs framgångsrikt och körningen av alla steg i skriptet slutförts framgångsrikt returnerar det 1.

Eftersom detta – nästa process sker inte. / p>

Om jag tar bort returuttalandet går nästa process smidigt. detta problem uppstod efter Hadoop-kluster upp gradering som har Ubuntu 14 och nya kluster har Ubuntu 16.

Kan du snälla hjälpa oss att förstå vad som är problemet och hur nästa process körs om du tar bort returkommandot här och vad är påverkan i produktionen om du tar bort Return-uttalandet?

Kommentarer

  • vad är nästa steg? vad kontrollerar nästa steg exakt?
  • Nästa är HQL (bikupfråga i Hadoop) och den har några affärssteg som den kör om jag kommenterar returvärdet det fungerar bra men inte kör om kommentar lämna tillbaka. Jag har ' t ändrar någonting i affärslogik / shell-skript, det enda vi hade gjort är att uppgradera

Svar

Uttrycket return returnerar ett fel om uttalandet inte körs från en funktion.

I skalfunktioner, använd return. Använd exit i skript.

Ett kort skript som

#!/bin/bash return 0 

ger felmeddelande

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

och det sätter $? till 1.

Om du inte ”t avsluta skriptet med ett uttryckligt exit (eller om du avslutar med exit men utan att ange en utgångskod), returkoden för skriptet som helhet kommer att vara detsamma som det senast körda kommandot.

Att ha exit "$?" är detsamma som vanlig exit, och om det står i slutet av skriptet kan detta utelämnas helt.


I allmänhet föreslår jag också att du använder $HOME snarare än att tilde i skript. Detta beror på att $HOME fungerar som alla andra variabler, medan tilde expanderas i ett separat expansionssteg, vilket innebär att den inte beter sig som en variabel och att den inte expanderas i citerade strängar . $HOME är också mer beskrivande och eftersom det är ett skript kan du spendera några extra tangenttryckningar för att göra koden mer läsbar.

Kommentarer

  • Jag har en snabb fråga för ovanför ditt svar..Jag kommer att försöka ovan med exist 0 men jag har en fråga varför det här problemet händer nu bara innan jag använder samma fråga? det fungerar om jag kommenterar tillbaka uttalande är denna inverkan någon sak?
  • @gsrao Om du kommenterar uttalandet return, kommer skriptets returkod att vara den för det senast utförda kommandot, så i ditt fall här kan du definitivt utesluta det. Jag kommer att lägga till detta i mitt svar.
  • Åh..mycket … du räddar mitt liv, så mitt fall om jag kommenterar returen som standard skriptet returnerar den senaste kommentaren lyckad flagga (rmdir ~ / sqoop / " $ TABLE ") eller hur? trots att ditt svar fungerar mig om två enkla frågor som äter min hjärna 1) mitt fall vad är användningen av " returnera $? " som du sa att det fungerar som om jag kommenterar " returnerar $ " 2) vad kan vara möjligt som orsakar problemet tidigare till nu?
  • @gsrao Ja, om du kommenterar return (som inte borde vara ' för att börja med eftersom det ' inte är i en funktion, så långt jag kan se ), kommer skriptets utgångsstatus att vara rmdir, om att ' är det sista kommandot i skriptet. När det gäller din senaste fråga förstår jag inte ' vad du menar med " frågan tidigare till nu ".
  • Min sista fråga..Jag använder samma skript som jag har använt före linux / kluster upp gradering det fungerade tills kluster upp gradering, varför nu bara detta problem händer? vad kan vara orsaken till det här problemet?

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *