난 그냥 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)