'%20%E3%82%92%E6%A4%9C%E7%B4%A2%E4%B8%AD%E3%81%AB%E4%BA%88%E6%9C%9F%E3%81%97%E3%81%AA%E3%81%84%20EOF%20%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F.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 であれば問題なく動作します。ただし、"here doc" ではなく "here string" を使用すると、理解しやすくデバッグしやすくなるかもしれません。
var=$(sqlplus / as sysdba <<< 'select status from v$instance; exit;')
または、標準パイプラインを使用します。
var=$(echo 'select status from v$instance; exit;' | sqlplus / as sysdba)