다음과 같은 bash 스크립트가 있습니다.
rm ~/sqoop/"$TABLE"/* rmdir ~/sqoop/"$TABLE" return $?
이 스크립트를 실행하면 다음 프로세스에 값을 반환하지만 스크립트가 성공적으로 실행되고 스크립트의 모든 단계를 성공적으로 실행하더라도 1을 반환합니다.
이 때문에-다음 프로세스가 발생하지 않습니다.
return 문을 제거하면 다음 프로세스가 순조롭게 진행됩니다. 이 문제는 Ubuntu 14 및 새 클러스터에 Ubuntu 16이있는 Hadoop 클러스터 업그레이드 이후에 발생했습니다.
반환 명령을 제거하면 문제가 무엇이며 다음 프로세스가 어떻게 성공적으로 실행되고 있는지 이해하도록 도와 주시겠습니까? 여기에서 Return 문을 제거하면 프로덕션에 어떤 영향이 있습니까?
댓글
- 다음 단계는 무엇입니까? 다음 단계는 정확히 무엇을 확인합니까?
- 다음은 HQL (Hadoop의 하이브 쿼리)이며 반환 값에 주석을 달면 실행중인 몇 가지 비즈니스 단계가 있습니다. 반환. ' 비즈니스 로직 / 셸 스크립트에서 아무것도 변경하지 않았습니다. 우리가 한 것은 업그레이드뿐입니다.
답변
return
문은 함수에서 실행되지 않으면 오류를 반환합니다.
셸 함수에서 return
를 사용하세요. 스크립트에서 exit
를 사용합니다.
#!/bin/bash return 0
와 같은 짧은 스크립트는 오류 메시지
line 1: return: can only `return" from a function or sourced script
그리고 $?
가 1로 설정됩니다.
“명시적인 exit
를 사용하여 스크립트를 종료하지 마십시오 (또는 exit
를 사용하여 종료하지만 종료 코드를 지정하지 않은 경우). 스크립트 전체는 마지막으로 실행 된 명령과 동일합니다.
exit "$?"
는 일반 exit
를 사용하고 “스크립트 끝 부분에 있으면 완전히 생략 할 수 있습니다.
일반적으로 $HOME
스크립트에서 물결표 대신. 이는 $HOME
가 다른 변수처럼 작동하는 반면 물결표는 별도의 확장 단계에서 확장되어 변수로 작동하지 않고 따옴표로 묶인 문자열로 확장되지 않기 때문입니다. . $HOME
도 더 설명적이고 스크립트이기 때문에 코드를 더 읽기 쉽게 만들기 위해 몇 번의 추가 키 입력을 사용할 수 있습니다.
댓글
- 귀하의 응답 위에 대한 빠른 쿼리가 있습니다. 위의 존재 0으로 시도 할 것이지만이 문제가 지금 발생하는 이유가 한 가지 있습니다. 동일한 쿼리를 사용합니까? 문이 이것이 영향을 미치는가?
- @gsrao
return
문을 주석 처리하면 스크립트의 반환 코드는 마지막으로 실행 된 명령의 코드가됩니다. 그래서 여기 당신의 경우, 당신은 확실히 생략 할 수 있습니다. 나는 이것을 내 대답에 추가 할 것입니다. - 오 .. 좋아요 .. 당신은 내 생명을 구하고 있습니다. 스크립트는 마지막 댓글 성공 플래그 (rmdir ~ / sqoop / " $ TABLE ")를 반환합니다. 맞습니까? 내 뇌를 먹는 두 개의 간단한 쿼리가 있으면 나 1) 내 경우
return $? " 제가 " 반품 $ " 2) 이전에 문제의 원인이 무엇 일 수 있습니까?
- @gsrao 예,
return
(' 시작할 수 없습니다. ' 내가 볼 수있는 한 함수에 없습니다. ), 스크립트의 종료 상태는rmdir
가됩니다 (스크립트의 마지막 명령 인 경우 ' 인 경우). 마지막 질문에 대해서는 ' " 이전의 문제 . - 마지막 질문입니다. linux / cluster up gradation 이전에 사용한 것과 동일한 스크립트를 사용하고 있습니다. cluster up gradation까지 작동했지만 왜 이제는이 문제 만 발생합니까? 이 문제의 원인은 무엇입니까?