일치하는 ")"을 찾는 동안 예기치 않은 EOF가 발생했습니다.

일치하는 ")"을 찾는 동안 예기치 않은 EOF가 발생했습니다.

난 그냥 SQL 문에서 출력을 가져와서 bash 변수에 저장하고 싶습니다. 일치하는 `)'를 찾을 때 "예기치 않은 EOF" 오류가 발생합니다. 내가 뭘 잘못하고 있는지 이해가 안 돼요. 이 오류가 발생하는 이유는 무엇입니까?

var=$($ORACLE_HOME/bin/sqlplus / as sysdba <<EOF  
select status from v\$instance;
exit;
EOF
)

답변1

스크립트가 이렇게 들여쓰기되어 있나요? Here-doc의 구분 기호는 줄의 시작 부분에 있어야 합니다. 이것은 나에게 효과적입니다.

#!/bin/bash
echo $(cat <<EOF
blah
EOF
)

답변2

Ikkachu가 맞습니다. 코드는 들여쓰기 없이 현대 버전의 Bash에서 잘 작동할 것입니다. 그러나 "여기에 문서" 대신 "여기에 문자열"을 사용하면 이해하고 디버깅하기가 더 쉽다는 점을 덧붙이고 싶습니다.

var=$(sqlplus / as sysdba <<< 'select status from v$instance; exit;')

또는 표준 파이프를 사용하십시오.

var=$(echo 'select status from v$instance; exit;' | sqlplus / as sysdba)

관련 정보