sh/Makefile에서 특정 오류 코드를 무시하고 싶습니다.

5264 단어 shMakeBashMakefile

TL; DR



쉘 스크립트의 경우
# エラーコード 1 を無視
cmd.sh || exit $(($? - 1))
# 複数のエラーコードを無視したい場合 (下記は 1, 2 を無視)
cmd.sh || ( exit $(($? - 1)) ) || ( exit $(($? - 1)) )

Makefile의 경우
TARGET:
    # エラーコード 1 を無視
    cmd.sh || exit $$(($$? - 1))
    # 複数のエラーコードを無視したい場合 (下記は 1, 2 を無視)
    cmd.sh || ( exit $$(($$? - 1)) ) || ( exit $$(($$? - 1)) )

덧붙여 : 이쪽의 방법으로는 에러 코드를 바꾼다고 하는 거친 일을 하고 있습니다만, 에러 코드를 바꾸고 싶지 않은 경우의 방법, 코멘트 받았습니다. 좋으면 그쪽도 봐주세요.

소개



shell 스크립트나 Makefile 의 처리로, 「이 에러는 처리를 계속해 주었으면 합니다만」같은 것, 가끔 있어요.

sh라면
cmd.sh || true  # エラーコードが常に 0 になる

Make 라고
TARGET:
    # 頭の "-" で、エラーを無視するようになる
    -cmd.sh

그렇다면 오류를 무시하지만 모든 오류가 무시됩니다. 그렇게 되면, 예상외의 에러 발생시에도 처리가 진행되어 버리므로, 가능하면 특정의 에러시만 무시하도록 하고 싶은 곳입니다.

거기서


# エラーコード 1 を無視
cmd.sh || exit $(($? - 1))
1를 다른 숫자로 설정하면 원하는 오류 코드를 지정할 수 있습니다.
||는 이전 명령이 오류 코드 1 이상으로 끝나면 뒤에 명령을 실행합니다.$? 로 직전의 커멘드의 에러 코드를 취해, $(( )) 로 계산을 할 수 있으므로, 1 을 당겨, 그것을 새로운 에러 코드로 하고 있습니다.

이제 오류 코드가 1이면 새 오류 코드가 0가되고 정상으로 간주되고 처리가 계속됩니다. 치수입니다.

Makefile도 기본적으로 동일합니다. 0 그렇지 않으면 sh 명령에 $$가 전달되지 않으므로 그냥주의하십시오.
TARGET:
    # エラーコード 1 を無視
    cmd.sh || exit $$(($$? - 1))

응용 프로그램 : 여러 오류 코드를 무시하고 싶습니다.



복수의 에러 코드를 정상으로 하고 싶을 때도, 같은 것을 연결해 가면 OK,,,입니다만, 이대로라면 최초의 exit 로 처리가 끝나 버리므로 $ (와)과 서브 쉘로 해 봅시다. (덧붙여 sh 스크립트의 경우에, 뒤에 처리가 있는 경우도 ( ) 로 와 줄 필요가 있습니다)
# 複数のエラーコードを無視したい場合 (下記は 1, 2 を無視)
cmd.sh || ( exit $(($? - 1)) ) || ( exit $(($? - 1)) )

또, 2 번째 이후의 ( ) 에는, 지금까지의 계산이 반영된 값이 들어가므로, 거기에는 주의가 필요합니다. 위의 예에서 두 번째 $?exit하지만 이전에 이미 -1 빼서 첫 번째 오류 코드가 1이면 여기에서 2입니다.
cmd.sh || ( exit $(($? - 1)) ) || ( exit $(($? - 2)) )

그렇다면 오류 코드 01를 무시합니다.

후기



비교적 자주 있는 필요한 생각이 듭니다만, 조금 구그라고 해도 페이지를 찾을 수 없었으므로, 써 보았습니다.

「더 좋은 방법이 있어!」라고 하는 분, 꼭 가르쳐 주시면 고맙습니다

좋은 웹페이지 즐겨찾기