참고로 저는 ksh
CentOS를 사용하고 실행하고 있습니다.
다음과 같이 로거 기능이 설정된 쉘 스크립트가 있습니다.
if tty -s
then
echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
echo "${FOO}" >> ${BAR_LOG_FILE}
fi
if
내 문제는 코드의 다른 모든 테스트 처럼 보이도록 리팩터링하면 실행이 중지된다는 것입니다.if
왜?
내 리팩토링은 다음과 같습니다.
if [ tty -s ];
then
echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
echo "${FOO}" >> ${BAR_LOG_FILE}
fi
내가 변경한 유일한 변경 사항은 나머지 테스트와 마찬가지로 주위에 괄호를 넣고 if
추가한 것 입니다 . 모두 예상대로 작동합니다.;
if
리팩토링 결과 BAR_LOG_FILE
찾을 수 없는 오류가 발생했습니다.
여기서 무슨 일이 일어나고 있는 걸까요?
답변1
다음 대괄호 if
는 쉘 구문이 아니며 스타일 기본 설정에 따라 생략되거나 생략될 수 있습니다.test
. (링크된 맨페이지는 외부 test
/ [
명령을 설명하지만 많은 쉘은 자체 구현을 제공합니다.)
글쓰기
if [ tty -s ];
글쓰기에 해당
if test tty -s;
test
/ 에는 연산자 [
가 없기 때문에 실패합니다 tty
.
if
그 뒤에는 그것을 실행하는 명령이 오고, 명령의 종료 코드는 나중에 어떤 분기를 가져올지 결정합니다 if
. 0이면 then
해당 분기를 가져오고, 그렇지 않으면 해당 else
분기(있는 경우)를 가져옵니다.