'%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%8F%99%EC%95%88%20%EC%98%88%EC%83%81%EC%B9%98%20%EB%AA%BB%ED%95%9C%20EOF%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 단순히 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)