변수 할당은 쉘 스크립트를 종료합니다.

Glenn Bech

특정 도커 컨테이너가 실행 중인지 확인하는 간단한 셸 스크립트가 있습니다. 쉘 스크립트에는 다음 줄이 있습니다.

RUNNING_CONTAINERS=$(docker ps -a | grep ${IMAGE_NAME})

grep이 결과를 반환하지 않으면 쉘 스크립트가 바로 종료됩니다. grep의 결과가 비어 있어도 스크립트가 계속 실행되도록 스크립트를 작성하려면 어떻게해야합니까?

페 도르 키 'SO stop harming'

그 이유는 set -e코드 어딘가에 존재 하기 때문에 명령이 0이 아닌 상태를 반환하는 즉시 스크립트가 종료됩니다. 이 경우 grep일치하는 항목을 찾지 못했기 때문입니다.

에서 읽으면서 배쉬 참조 설명서 ->를 set내장

-e

단일 명령 (단순 명령 참조), 목록 (목록 참조) 또는 복합 명령 (복합 명령 참조)으로 구성 될 수있는 파이프 라인 (파이프 라인 참조)이 0이 아닌 상태를 반환하면 즉시 종료합니다. 실패한 명령이 while 또는 until 키워드 바로 뒤에 오는 명령 목록의 일부, if 문에서 테스트의 일부, && 또는 ||에서 실행되는 명령의 일부인 경우 쉘은 종료되지 않습니다. 마지막 && 또는 || 뒤에 오는 명령, 파이프 라인에 있지만 마지막 명령을 제외한 모든 명령 또는 명령의 반환 상태가!로 반전되는 경우 -e가 무시되는 동안 명령이 실패하여 서브 쉘 이외의 복합 명령이 0이 아닌 상태를 리턴하면 쉘이 종료되지 않습니다. ERR에 대한 트랩이 설정된 경우 쉘이 종료되기 전에 실행됩니다.

또한에서 man grep:

종료 상태

일반적으로 종료 상태는 라인이 선택된 경우 0, 라인이 선택되지 않은 경우 1, 오류가 발생한 경우 2입니다. 그러나 -q 또는 --quiet 또는 --silent를 사용하고 라인을 선택한 경우 오류가 발생하더라도 종료 상태는 0입니다.

따라서 grep아무것도 찾지 못하고 0이 아닌 종료 상태를 반환합니다. 그런 다음이를 set -e캡처하고 "예외"( if, while... 참조에서 언급 한대로)에서 비롯되지 않았는지 확인 하고 파이프 라인의 마지막 명령 이전이 아니므로 종료합니다.

테스트

매우 기본적인 스크립트를 만들어 보겠습니다.

$ cat a.sh 
#!/bin/bash

set -e
echo "hello"
grep "hello" a
echo "bye"

그리고 빈 a파일을 생성 합니다.

$ touch a

실행하면 grep결과가 반환되지 않을 때 종료됩니다 .

$ ./a.sh 
hello

그러나 set -e을 제거 하면 파일 끝까지 이동합니다.

$ ./a.sh 
hello
bye

grep파이프 라인의 마지막 요소가 아닌 경우 실패하지 않습니다 .

$ cat a.sh
#!/bin/bash

set -e
echo "hello"
grep "hello" a | echo "he"
echo "bye"
$ ./a.sh 
hello
he
bye

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

WLST Python 스크립트가 쉘 스크립트의 변수를 승인 할 수 없습니다.

분류에서Dev

쉘 스크립트 실행 결과를 변수에 할당

분류에서Dev

다른 쉘 스크립트에서 쉘 스크립트를 실행할 수 없습니다.

분류에서Dev

Maven : 쉘 스크립트를 실행할 수 없습니다.

분류에서Dev

쉘 변수 할당은 자동으로 '['를 이스케이프합니다.

분류에서Dev

쉘 스크립트를 생성하고 생성 된 쉘 스크립트에 정의 된 쉘 변수를 사용하는 방법은 무엇입니까?

분류에서Dev

Perl 스크립트에서 쉘 스크립트로 변수를 내보내는 방법은 무엇입니까?

분류에서Dev

쉘 스크립트를 사용하여 어떻게 vi를 종료 할 수 있습니까?

분류에서Dev

쉘 스크립트에서 들여 쓰기를 사용하여 변수에 여러 줄 문자열 값을 할당하는 방법은 무엇입니까?

분류에서Dev

쉘 스크립트 내부의 쉘 스크립트가 int 변수를 얻지 못합니다.

분류에서Dev

ssh를 사용하여 쉘 스크립트를 실행할 수 없습니다.

분류에서Dev

Vagrantfile : 인라인 쉘 스크립트의 결과를 변수에 할당

분류에서Dev

gnuplot : 스크립트에서 쉘 변수를 설정 한 다음 나중에 호출 할 수 있습니까?

분류에서Dev

동적으로 변수를 만들고 쉘 스크립트에서 해당 값을 가져옵니다.

분류에서Dev

동적으로 변수를 만들고 쉘 스크립트에서 해당 값을 가져옵니다.

분류에서Dev

쉘 스크립트의 변수 할당 규칙

분류에서Dev

쉘 스크립트에서 변수 할당의 공백

분류에서Dev

쉘 스크립트의 while 루프 내에서 변수 할당

분류에서Dev

쉘 스크립트 변수-대체를 완료하는 방법

분류에서Dev

쉘 스크립트를 사용하여 각 줄을 추출하고 변수에 할당하고 개별적으로 새 파일로 저장합니다.

분류에서Dev

쉘은 어느 위치에 일반 변수를 할당합니까?

분류에서Dev

cygwin을 통해 쉘 스크립트에서 실행할 때 powershell 스크립트에 매개 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

Hello World 쉘 스크립트를 FreeBSD에서 실행할 수 없습니다.

분류에서Dev

cygwin에서 쉘 스크립트를 실행할 수 없습니다.

분류에서Dev

사용자 정의 된 쉘 스크립트를 실행할 수 없습니다.

분류에서Dev

더 높은 수준의 스크립팅 언어가 쉘 스크립트를 사용하여 작동합니까?

분류에서Dev

"at"명령은 모든 종류의 쉘 스크립트를 실행할 수 있습니까?

분류에서Dev

쉘 변수 내에서 스크립트를 awk에 전달할 수 있습니까?

분류에서Dev

쉘 스크립트의 변수를 인수로 전달하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    WLST Python 스크립트가 쉘 스크립트의 변수를 승인 할 수 없습니다.

  2. 2

    쉘 스크립트 실행 결과를 변수에 할당

  3. 3

    다른 쉘 스크립트에서 쉘 스크립트를 실행할 수 없습니다.

  4. 4

    Maven : 쉘 스크립트를 실행할 수 없습니다.

  5. 5

    쉘 변수 할당은 자동으로 '['를 이스케이프합니다.

  6. 6

    쉘 스크립트를 생성하고 생성 된 쉘 스크립트에 정의 된 쉘 변수를 사용하는 방법은 무엇입니까?

  7. 7

    Perl 스크립트에서 쉘 스크립트로 변수를 내보내는 방법은 무엇입니까?

  8. 8

    쉘 스크립트를 사용하여 어떻게 vi를 종료 할 수 있습니까?

  9. 9

    쉘 스크립트에서 들여 쓰기를 사용하여 변수에 여러 줄 문자열 값을 할당하는 방법은 무엇입니까?

  10. 10

    쉘 스크립트 내부의 쉘 스크립트가 int 변수를 얻지 못합니다.

  11. 11

    ssh를 사용하여 쉘 스크립트를 실행할 수 없습니다.

  12. 12

    Vagrantfile : 인라인 쉘 스크립트의 결과를 변수에 할당

  13. 13

    gnuplot : 스크립트에서 쉘 변수를 설정 한 다음 나중에 호출 할 수 있습니까?

  14. 14

    동적으로 변수를 만들고 쉘 스크립트에서 해당 값을 가져옵니다.

  15. 15

    동적으로 변수를 만들고 쉘 스크립트에서 해당 값을 가져옵니다.

  16. 16

    쉘 스크립트의 변수 할당 규칙

  17. 17

    쉘 스크립트에서 변수 할당의 공백

  18. 18

    쉘 스크립트의 while 루프 내에서 변수 할당

  19. 19

    쉘 스크립트 변수-대체를 완료하는 방법

  20. 20

    쉘 스크립트를 사용하여 각 줄을 추출하고 변수에 할당하고 개별적으로 새 파일로 저장합니다.

  21. 21

    쉘은 어느 위치에 일반 변수를 할당합니까?

  22. 22

    cygwin을 통해 쉘 스크립트에서 실행할 때 powershell 스크립트에 매개 변수를 전달하는 방법은 무엇입니까?

  23. 23

    Hello World 쉘 스크립트를 FreeBSD에서 실행할 수 없습니다.

  24. 24

    cygwin에서 쉘 스크립트를 실행할 수 없습니다.

  25. 25

    사용자 정의 된 쉘 스크립트를 실행할 수 없습니다.

  26. 26

    더 높은 수준의 스크립팅 언어가 쉘 스크립트를 사용하여 작동합니까?

  27. 27

    "at"명령은 모든 종류의 쉘 스크립트를 실행할 수 있습니까?

  28. 28

    쉘 변수 내에서 스크립트를 awk에 전달할 수 있습니까?

  29. 29

    쉘 스크립트의 변수를 인수로 전달하는 방법은 무엇입니까?

뜨겁다태그

보관