.sh에서 &&와 함께 git 사용이 실패하지만 명령줄에서는 실패하는 이유는 무엇입니까?

.sh에서 &&와 함께 git 사용이 실패하지만 명령줄에서는 실패하는 이유는 무엇입니까?

update_content.sh3개의 연속 명령을 실행하는 스크립트( 라고 함)가 있는데 git첫 번째 버전은 다음과 같습니다.

#!/bin/sh
git fetch --all && git reset --hard && git merge

실행하면 다음과 같은 출력이 표시됩니다.

web@bane:~# ./update_content.sh
Fetching origin
error: unable to create file locales/fr.json (File exists)
error: unable to create file locales/it.json (File exists)
fatal: Could not reset index file to revision 'HEAD'.

그러나 이것을 다음과 같이 바꾸면:

#!/bin/sh
git fetch --all
git reset --hard
git merge

실행해 보니 다음과 같습니다.

web@bane:~# ./update_content.sh
Fetching origin
HEAD is now at 5859b2e Added Business tab
Already up-to-date.

개행 접근 방식은 내가 원하는 결과를 얻지만 "단계가 실패하면 계속하지 않음" 품질이 없습니다 &&. git이것이 작동하는 방식 에 대해 호환되지 않는 뭔가가 있습니까 , &&아니면 뭔가 빠졌습니까 &&?

좀 더 자세히 조사한 결과 &&명령줄에서 실행할 때 라이너가 오류를 발생시키지 않지만 실제로 로컬 작업 복사본을 재설정하지는 않지만 스크립트 내부(및 당시)의 개행 메서드에서는 오류가 발생한다는 사실을 발견했습니다.

답변1

일반적으로 처음 두 명령 중 하나가 0이 아닌 코드로 종료되었다고 추측합니다. 그러나 이렇게 하면 다음 명령이 모두 실행되지 않으며 실행되지 않는 명령은 오류 메시지를 생성하지 못합니다...

그러나 다음을 사용하여 명령의 종료 코드를 확인할 수 있습니다.

git fetch --all   ; echo "exit code: ${?}"
git reset --hard  ; echo "exit code: ${?}"
git merge         ; echo "exit code: ${?}"

이는 스크립트를 실행하는 데 도움이 됩니다.

bash -vx ./update_content.sh

관련 정보