SQLite3-Befehlszeile: Wie brechen Sie einen Befehl ab?

12

Ich habe einen Fehler beim Schreiben eines Befehls an der SQLite-Eingabeaufforderung gemacht, den ich jetzt abbrechen möchte. So sieht meine Befehlszeile aus

sqlite> select * from todos'
   ...> '
   ...> ;^C

In diesem Fall kann ich wahrscheinlich nicht einmal ENTERden Befehl ausführen , weil ich ein Angebot geöffnet habe . Ich bekomme nur eine Zeilenfortsetzung, die immer noch nicht ideal wäre, weil ich schlechten Code und Ursache und Fehler ausführen müsste, um die Kontrolle über die Eingabeaufforderung wiederzugewinnen.
Wie kann ich die Zeile / den Befehl abbrechen und zu einer Eingabeaufforderung zurückkehren?

the_velour_fog
quelle
Vielleicht wird ^ D stdin für schließen sqliteund es beenden lassen ...
Ralph Rönnquist
2
@Ralph Strg + D bewirkt, dass SQLite die gesamte Sitzung beendet, einschließlich des Verlusts von Speicherdatenbanken - falls Sie eine ausführen möchten.
the_velour_fog

Antworten:

14

Die sqlite3Schnittstelle verwendet die ReadLine-Bibliothek zur Bearbeitung der Befehlszeile. Sie können eine vollständige Zeile mit löschen, Ctrl+Uaber sobald Sie gedrückt haben Enter, wurde die Zeile akzeptiert und kann nicht mehr bearbeitet werden (nun ja, aber nicht als Teil der aktuellen Anweisung).

Wie Sie bemerkt haben, fordert das Senden des Dateiende mit Ctrl+Dden Client zum Beenden auf, was nicht das ist, was Sie wollen.

Ihre beste Wette ist zu

  1. Schließen Sie eine beliebige Zeichenfolge und dann
  2. ;Generieren Sie vor der Ausgabe eines Finales einen Syntaxfehler.

In Ihrem Beispiel:

sqlite> select * from todos'
   ...> '
   ...> *** I made a mistake
   ...> ;
Error: near "*": syntax error
sqlite>

Dadurch wird sichergestellt, dass nichts ausgeführt wird, und Sie bleiben in der SQLite-Sitzung mit intakten temporären Tabellen.

Kusalananda
quelle
1
danke, ja, ich dachte, das wäre vielleicht die beste
Lösung
1
Wenn Sie nach einer Pfeiltaste die Eingabetaste gedrückt haben, dh Sie haben so etwas wie > ^[[Aund dann ...>müssen Sie die Klammern schließen, um dies abzubrechen : > ]];. Es sollte wirklich Strg + C dafür unterstützen. Auf diese Weise ist es widerlich.
mxmlnkn