Verwenden von SQLite3 mit Cygwin

7

Ich versuche, die Befehlsshell sqlite3.exe mit einem Mintty-Terminal in Cygwin zu verwenden. Ich habe das Programm über eine Windows-Eingabeaufforderung ausprobiert und es funktioniert. Wenn ich versuche, es vom Cygwin Mintty Terminal aus zu verwenden, scheint das Programm zu hängen. Ich kann die Parameter und die Version sehen. Es ist, als würde es aufhören, in das Terminal zu schreiben, wenn ich die Shell starte.

Hat jemand dieses Problem schon einmal gehabt und wenn ja, wie haben Sie es behoben? TIA.

~>sqlite3 -help
Usage: C:\Windows\sqlite3.exe [OPTIONS] FILENAME [SQL]
FILENAME is the name of an SQLite database. A new database is created
if the file does not previously exist.
OPTIONS include:
   -init filename       read/process named file
   -echo                print commands before execution
   -[no]header          turn headers on or off
   -bail                stop after hitting an error
   -interactive         force interactive I/O
   -batch               force batch I/O
   -column              set output mode to 'column'
   -csv                 set output mode to 'csv'
   -html                set output mode to HTML
   -line                set output mode to 'line'
   -list                set output mode to 'list'
   -separator 'x'       set output field separator (|)
   -nullvalue 'text'    set text string for NULL values
   -version             show SQLite version
~>sqlite3

Hier hängt es. Nachfolgend finden Sie die Versionen einiger relevanter Software.

~>uname -srv
CYGWIN_NT-6.1-WOW64 1.7.7(0.230/5/3) 2010-08-31 09:58
~>mintty --version

mintty 0.9.5
(C) 2010 Andy Koppe

~>bash -version
bash -version
GNU bash, version 4.1.9(3)-release (i686-pc-cygwin)
Copyright (C) 2009 Free Software Foundation, Inc.

BEARBEITEN : Wenn ich das Programm über die Windows-Befehlszeile ausführe, funktioniert das Programm. Das sollte ich sehen:

C:\Users\jmquigley\workspace\apis.net\sqlite>sqlite3
SQLite version 3.7.5
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .quit

Wenn ich den Befehl in Cygwin ausführe, wird er nie in die Shell eingegeben. es scheint aufzulegen und ich muss STRG + C drücken, um es zu beenden und zur Bash-Eingabeaufforderung zurückzukehren.

jmq
quelle

Antworten:

10

Interaktives Nicht-Cygwin-Programm funktioniert in Cygwin-Terminals wie Mintty, die auf Pseudo-Terminal-Geräten ("pty") basieren, häufig nicht richtig. Das liegt daran, dass Cygwin Windows-Pipes verwendet, um ptys zu emulieren, sodass native Konsolenprogramme eine Pipe sehen, in der sie eine Konsole erwarten. Dies führt unter anderem häufig dazu, dass sie in den nicht interaktiven Modus wechseln. Weitere Informationen hierzu finden Sie hier:

http://code.google.com/p/mintty/issues/detail?id=56

Möglicherweise können Sie es mit dem -interactiveSwitch erträglich zum Laufen bringen, aber die eigentliche Lösung besteht darin, die Cygwin-Version von sqlite3 über Cygwin setup.exe zu installieren .

ak2
quelle
Ich konnte es zum Laufen bringen, indem ich die native Build-Version über Cygwin herunterlud (Ihre zweite Option). Ich habe nicht einmal über diese Option nachgedacht, heh. Vielen Dank für die großartige Erklärung, warum es nicht funktioniert. Ich habe auch das erste probiert und es hat irgendwie funktioniert (wie du erwähnt hast). Es schien eine "Puffer" -Verzögerung zu geben, bei der Informationen in Bildschirmen ausgegeben wurden, nachdem Sie eine bestimmte Zeichenschwelle überschritten hatten. Danke noch einmal.
jmq
Bitte. Diese Ausgabeverzögerung ist in der Tat auf die Pufferung zurückzuführen: Standardmäßig werden Ausgabestreams ungepuffert, wenn sie an eine Konsole angeschlossen sind, aber vollständig gepuffert, wenn sie an eine Pipe angeschlossen sind.
Ak2
2

Starten Sie Cygwin mit dem Befehl

C:\cygwin\Cygwin.bat

anstatt

C:\cygwin\bin\mintty.exe
Chentuo
quelle
Ich denke nicht, dass das richtig ist. Die Verwendung der einen oder anderen Methode zum Starten von Cygwin hat keinen Einfluss darauf, wie das Programm mit der Eingabe / Ausgabe interagiert. Dies ist hier der Grundfall, wie oben in ak2 erläutert.
Elende Variable
Für mich löste es das Problem, so dass es zumindest könnte richtig sein. ;-)
Bowi
0

Ich bin mir nicht sicher, ob ich das verstehe.

 ~>sqlite3

Es "hängt" nach dem zweiten ~> sqlite3?

Zu diesem Zeitpunkt führen Sie sqlite3 nicht mehr aus, oder? Es ist zu einer Eingabeaufforderung zurückgekehrt. Zunächst haben Sie nur die Hilfe angezeigt und das Programm beendet. Geben Sie entweder sqlite3.exe alleine ein oder geben Sie eine Datenbank zum Öffnen an, z. B. sqlite3.exe sites.sqlite. Dann bleibt das Programm geöffnet und wartet auf Ihre Befehle.

(Ich habe keine Kenntnisse über Cygwin oder Minze, so dass mich das vielleicht abschreckt?)

therube
quelle
Ich tippe "sqlite3" an der Eingabeaufforderung von cygwin bash und das Programm hängt einfach. Ich muss STRG + C verwenden, um zu beenden und zur Eingabeaufforderung zurückzukehren. Wenn es anfängt zu "laufen", passiert nichts.
jmq
0

Sofern Sie SQLite nicht speziell für die Arbeit in Cygwin benötigen, ist der SQLite-ODBC-Treiber für Windows möglicherweise die bessere Option. Es ermöglicht Windows-nativen Zugriff auf SQLite-Datenbanken über ODBC, sodass Programme wie OpenOffice Base und Microsoft Access sowie viele andere eine Verbindung herstellen und verwenden können.

Amphetamachine
quelle