Bash의 테스트 옵션이 제대로 작동하지 않습니다.

Bash의 테스트 옵션이 제대로 작동하지 않습니다.

다음 명령을 사용하여 noclobber 옵션을 테스트하려고 시도했지만 if [ -o noclobber ]아무 작업도 수행되지 않았습니다.

다음을 사용하도록 noclobber 옵션을 설정했습니다 set +o noclobber.

prompt> cat checkoption.sh
#!/bin/bash
if [ -o noclobber ]
     then
          echo "Option is on."
fi
prompt>
prompt> set +o noclobber
prompt> set -o | grep noglobber
noclobber       on
prompt> ./checkoption.sh
prompt>

왜 여기서 메시지를 받지 못하는지 아시나요?

답변1

셸 옵션은 셸 세션 간에 상속되지 않으며 여기서는 두 개의 셸 세션을 처리합니다.

  1. 셸 옵션을 설정하는 대화형 세션
  2. 옵션을 테스트하는 쉘 스크립트 세션입니다.

쉘 스크립트는 호출하는 대화형 쉘 세션에서 이 옵션이 설정되어 있음을 감지하지 않습니다.

해결책:

  1. 코드를 셸 함수(예 $HOME/.bashrc: )로 변환합니다.

    checknoclobber () { [ -o noclobber ] && echo 'Noclobber is on'; }
    

    또는 일반적인 경우에는

    checkoption () {
        if [ -o "$1" ]; then
            printf '%s is set\n' "$1" >&2
            return 0
        else
            printf '%s is not set (or invalid option name)\n' "$1" >&2
            return 1
        fi
    }
    
  2. 스크립트에서 옵션을 설정합니다.

  3. source대화형 쉘에서 스크립트 파일을 가져오려면 또는 명령을 사용하십시오 ..

관련 정보