Bash 스크립트 반환 값 오류

Bash 스크립트 반환 값 오류

다음과 같은 bash 스크립트가 있습니다.

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

이 스크립트를 실행한 후 다음 프로세스에 값을 반환하지만, 스크립트가 성공적으로 실행되어 스크립트의 모든 단계를 성공적으로 완료하더라도 1을 반환합니다.

이로 인해 다음 프로세스가 발생하지 않습니다.

return 문을 제거하면 나머지 프로세스가 원활하게 진행됩니다. 이 문제는 Ubuntu 14가 있는 Hadoop 클러스터와 Ubuntu 16이 있는 새 클러스터를 업그레이드한 후에 나타났습니다.

여기서 return 명령을 제거하면 문제가 무엇인지, 다음 프로세스가 어떻게 성공적으로 실행되는지, return 문을 제거하면 프로덕션에 어떤 영향이 있는지 이해하는 데 도움을 주실 수 있습니까?

답변1

return명령문이 함수 또는 도트 스크립트(소스 스크립트)에서 실행되지 않으면 명령문은 오류를 반환합니다.

쉘 함수 및 도트 스크립트에서는 를 사용 합니다 return.exit

다음과 같은 짧은 스크립트

#!/bin/bash

return 0

오류 메시지가 생성됩니다

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

$?그리고 1로 설정합니다 .

스크립트를 명시적으로 종료하지 않는 경우 exit(또는 종료 코드를 지정하지 않고 종료하는 경우 exit) 전체 스크립트의 반환 코드는 마지막으로 실행된 명령과 동일합니다.

have는 exit "$?"plain과 동일 exit하며 스크립트 끝에 있으면 완전히 생략할 수 있습니다.


$HOME일반적으로 스크립트에서 물결표 대신 물결표를 사용하는 것이 좋습니다 . $HOME물결표는 별도의 확장 단계에서 확장되는 반면, 물결표는 다른 변수처럼 작동하기 때문입니다 . 즉, 변수로 작동하지 않으며 인용된 문자열 내에서 확장되지 않습니다. $HOME또한 더 설명적이며 스크립트이기 때문에 몇 가지 추가 키 입력을 사용하여 코드를 더 읽기 쉽게 만들 수 있습니다.

관련 정보