명령 출력이 저장되지 않고 정규 표현식이 실패합니다.

명령 출력이 저장되지 않고 정규 표현식이 실패합니다.

yarn prettier --check ./src좋은 코드 형식을 적용하기 위해 React 앱에서 실행되는 git post-push 후크를 작성하려고 합니다 . 나는 명령의 출력을 저장하고 정규식을 사용하여 특정 오류가 발생하는지 확인할 수 있다고 생각했습니다.

Bash 스크립트로 실행하려고 합니다.

#!/bin/bash
cd frontend/
VAR=$(yarn prettier --check ./src)
if [[ $VAR =~ .*"error Command failed with exit code 1."* ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

출력 내용은 다음과 같습니다.

[warn] src/order/orderApi.ts
[warn] Code style issues found in the above file. Forgot to run Prettier?
error Command failed with exit code 1.                                                                          
Passed prettier

나는 의도적으로 orderApi.tx에 오류를 넣었는데, Prettier가 이를 잡을 것이라고 생각했습니다.

출력을 저장할 때 Variable=$(command insert) 다음 튜토리얼을 확인했지만 결과를 얻지 못한 것 같습니다.

답변1

문자열 비교를 사용하는 대신 다음을 사용하여 명령의 종료 코드를 확인할 수 있습니다.

yarn prettier --check ./src
if [[ $? -eq 1 ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

중요한: 대괄호와 명령문 사이에 공백을 추가하십시오: [[ $? -eq 1 ]];.


문자열 비교와 관련하여 원사 오류는 리디렉션되고 명령 stderr만 할당하기 때문에 변수에는 실제로 오류 메시지가 표시되지 않습니다. stdout따라서 오류/stderr도 할당하려면 다음 stderr으로 리디렉션하세요 stdout.

VAR=$(yarn prettier --check ./src 2>&1)

# or: if [[ $VAR =~ "error Command failed with exit code 1." ]]; then
if [[ $VAR =~ .*"error Command failed with exit code 1."* ]]; then
        echo "Failed to run prettier before push."
else
        echo "Passed prettier"
fi

아니면 stderr다음을 사용하여 리디렉션하세요.

VAR=$(yarn prettier --check ./src 2>&1 >/dev/null)

관련 정보