Ik heb een fout gemaakt bij het schrijven van een commando bij de SQLite-opdrachtprompt, die ik nu wil afbreken, zo ziet mijn opdrachtregel eruit

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

In dit geval kan ik, waarschijnlijk omdat ik een citaat heb geopend, “zelfs niet op ENTER drukken om de opdracht uit te voeren. I krijg gewoon een regel voortzetting, dat zou nog steeds niet ideaal zijn omdat ik slechte code en oorzaak en fout zou moeten uitvoeren, alleen om de controle over de prompt terug te krijgen.
Hoe kan ik de regel / het commando annuleren en terugkrijgen naar een prompt?

Reacties

  • Misschien zal ^ D stdin sluiten voor sqlite en het afsluiten …
  • @Ralph ctrl D zorgt ervoor dat sqlite de hele sessie verlaat, inclusief het verlies van alle in het geheugen opgeslagen databases – als je er maar een wilt draaien.

Antwoord

De sqlite3 -interface gebruikt de ReadLine-bibliotheek voor het bewerken van de opdrachtregel. U kunt een volledige regel wissen met h Ctrl + U maar als je eenmaal op Enter hebt gedrukt, is de regel geaccepteerd en kan deze niet meer worden bewerkt.

Zoals je hebt opgemerkt , het verzenden van Ctrl + D zal de client vragen om af te sluiten, wat niet is wat u wilt.

Uw beste gok is om

  1. een tekenreeks te sluiten, en vervolgens,
  2. alvorens een laatste ; uit te geven, een opzettelijke syntaxisfout te genereren.

In jouw voorbeeld:

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

Dit zorgt ervoor dat er niets wordt uitgevoerd, en het laat je achter in de SQLite-sessie met eventuele tijdelijke tabellen intact.

Reacties

  • bedankt, ja ik dacht dat dit de beste oplossing zou kunnen zijn
  • Als je op voer achter een pijltoets in, dwz je hebt zoiets als > ^[[A en dan ...>, dan moet je de haakjes sluiten om dat te annuleren: > ]];. Het zou hiervoor echt Ctrl + C moeten ondersteunen. Het ' is op deze manier irritant.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *