Udělal jsem chybu při psaní příkazu na příkazovém řádku SQLite, který nyní chci přerušit, takhle vypadá můj příkazový řádek

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

V tomto případě, pravděpodobně proto, že jsem otevřel nabídku, nemohu spustit příkaz ENTER. I stačí získat pokračování řádku, což by bylo stále méně než ideální, protože bych musel spustit špatný kód a příčinu a chybu, abych znovu získal kontrolu nad výzvou.
Jak mohu zrušit řádek / příkaz a vrátit se zpět na výzvu?

Komentáře

  • Možná ^ D zavře stdin pro sqlite a ukončí jej …
  • @Ralph ctrl D způsobí, že sqlite ukončí celou relaci, včetně ztráty jakékoli v paměťových databázích – pokud byste náhodou nějakou spustili.

Odpověď

Rozhraní sqlite3 používá pro úpravy příkazové řádky knihovnu ReadLine. Celý řádek můžete vymazat h Ctrl + U , ale jakmile stisknete Enter , řádek byl přijat a již jej nelze upravovat.

Jak jste všimli , odeslání Ctrl + D vyzve klienta k ukončení, což není to, co chcete.

Vaše nejlepší sázka je

  1. zavřít libovolný řetězec a poté
  2. před vydáním konečného ; vygenerovat záměrnou chybu syntaxe.

Ve vašem příkladu:

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

Tím zajistíte, že se nic nespustí, a ponechá vás v relaci SQLite s neporušenými dočasnými tabulkami.

Komentáře

  • děkuji, ano, myslel jsem si, že by to mohlo být nejlepší řešení
  • Pokud jste stiskli zadejte za klávesou se šipkou, tj. máte něco jako > ^[[A a poté ...>, pak musíte závorky zavřít, abyste to zrušili: > ]];. Opravdu by to mělo podporovat Ctrl + C. Takto je to ' nepříjemné.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *