2017-03-03 7 views
2

Ich habe Probleme, warum herauszufinden, erhalte ich den Fehler im Titel definiert.Warum erhalte ich `(‘ unerreichte

Neulich war ich das gleiche Problem in einem ähnlichen Skript, aber mit `< < . 'unerreichte fand ich dann this was mir geholfen, mein Problem zu lösen ich habe Probleme, die gleiche Art von Lösung, um dieses Problem Anwendung

Mein Block:..

+95   master_table=$(sqlplus -s <<- EOF 
    +96   ${SQLMSTR} 
    +97   select * from UTILS.PAGE_TO; 
    +98   EOF 
    +99   ) 

ich bekommen kann es, wenn die Arbeit I Entferne alle Leerzeichen vor EOF on line 98. Kann mir jemand helfen zu verstehen, was ich falsch mache?

Ich bin mit ksh93

Mein „anderen“ Block aus einem separaten Skript, das funktioniert (es gibt Leerzeichen vor jeder Zeile auf Skript):

sqlplus -s <<- EOF 
${SQLMSTR} 
exec utils.change_page('${TEAM}'); 
EOF 
+0

Verwenden Sie Tabs zum Einrücken? '<< -' funktioniert nur mit Tabs, nicht mit Leerzeichen. – codeforester

+0

Hallo, @codeforester, ich benutze Leerzeichen, aber ich habe auch '<< #' mit keinem Erfolg versucht –

Antwort

1

ändern <<--<< und verschieben EOF zu der Anfang der Linie:

+95   master_table=$(sqlplus -s << EOF 
    +96   ${SQLMSTR} 
    +97   select * from UTILS.PAGE_TO; 
    +98 EOF 
    +99   ) 

Ich weiß, dass es hässlich aussieht. Eine Möglichkeit, dies zu umgehen, besteht darin, eine Funktion zu erstellen, die die SQL-Anweisung als Argument akzeptiert und ausführt. Wie folgt:

function run_sqlplus() { 
    sqlplus -s << EOF 
    ${SQLMSTR} 
    [email protected] 
EOF 
} 

    : indented code 
    master_table=$(run_sqlplus 'select * from UTILS.PAGE_TO;') 
+0

Hallo, danke für Ihre Antwort. Wie ich in meiner Frage gesagt habe, konnte ich mit Erfolg laufen, wenn ich 'EOF' an den Anfang der Zeile' 98' bewegte, wie in Ihrer Antwort vorgeschlagen, möchte ich jedoch die Formatierung konsistent halten. Ist es mir nicht möglich? –

+0

Ich habe gerade die Antwort mit einem Vorschlag aktualisiert, wie man den Einzug behält. – codeforester

+0

danke, ich habe die Funktion Methode in einem anderen Skript verwendet, ich dachte nur, es gab einen anderen Weg durch die Verwendung eines Here-Doc –