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 ENTER drücken, um den Befehl auszuführen Erhalten Sie einfach eine Zeilenfortsetzung, die immer noch nicht ideal wäre, da ich fehlerhaften 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 zurückgegeben werden? zu einer Eingabeaufforderung?

Kommentare

  • Vielleicht schließt ^ D stdin für sqlite und beendet es …
  • @Ralph Strg D bewirkt, dass SQLite die gesamte Sitzung beendet, einschließlich des Verlusts von Speicherdatenbanken – wenn Sie möglicherweise eine ausführen.

Antwort

Die Schnittstelle sqlite3 verwendet die ReadLine-Bibliothek für die Befehlszeilenbearbeitung. Sie können einen vollständigen Zeilenwitz löschen h Strg + U , aber sobald Sie die Eingabetaste gedrückt haben, wurde die Zeile akzeptiert und kann nicht mehr bearbeitet werden.

Wenn Sie bemerkt Wenn Sie Strg + D senden, wird der Client zum Beenden aufgefordert, was nicht das ist, was Sie wollen.

Ihre beste Wahl ist,

  1. eine beliebige Zeichenfolge zu schließen und dann
  2. vor dem Ausgeben einer endgültigen ; einen absichtlichen Syntaxfehler zu generieren.

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.

Kommentare

  • Danke, ja, ich dachte, das wäre die beste Problemumgehung
  • Wenn Sie gedrückt haben Geben Sie nach einer Pfeiltaste ein, dh Sie haben so etwas wie > ^[[A und dann ...>. Dann müssen Sie die Klammern schließen, um dies abzubrechen: > ]];. Es sollte wirklich Strg + C dafür unterstützen. ' ist auf diese Weise widerlich.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.