unerwartetes EOF beim Suchen nach passendem `)'

unerwartetes EOF beim Suchen nach passendem `)'

Ich versuche einfach, die Ausgabe einer SQL-Anweisung abzurufen und in einer Bash-Variable zu speichern. Ich erhalte die Fehlermeldung „Unerwartetes EOF bei der Suche nach übereinstimmendem `)'“. Ich weiß nicht, was ich falsch mache. Warum erhalte ich diese Fehlermeldung?

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

Antwort1

Ist Ihr Skript so eingerückt? Das Trennzeichen für das Here-Doc muss am Zeilenanfang stehen. Bei mir funktioniert das:

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

Antwort2

Ikkachu hat Recht, dass der Code, wenn er nicht eingerückt ist, auf jeder einigermaßen modernen Version von Bash einwandfrei funktionieren sollte. Ich möchte jedoch hinzufügen, dass Sie ihn möglicherweise leichter verstehen und debuggen können, wenn Sie einen „Here-String“ anstelle eines „Here-Doc“ verwenden:

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

Oder verwenden Sie eine Standard-Pipeline:

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

verwandte Informationen