다음 명령을 사용하여 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
셸 옵션은 셸 세션 간에 상속되지 않으며 여기서는 두 개의 셸 세션을 처리합니다.
- 셸 옵션을 설정하는 대화형 세션
- 옵션을 테스트하는 쉘 스크립트 세션입니다.
쉘 스크립트는 호출하는 대화형 쉘 세션에서 이 옵션이 설정되어 있음을 감지하지 않습니다.
해결책:
코드를 셸 함수(예
$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 }
스크립트에서 옵션을 설정합니다.
source
대화형 쉘에서 스크립트 파일을 가져오려면 또는 명령을 사용하십시오.
.