Использование SQLite3 с Cygwin

10189
jmq

Я пытаюсь использовать командную оболочку sqlite3.exe с мятным терминалом в Cygwin. Я попробовал программу из командной строки Windows, и она работает. Когда я пытаюсь использовать его из терминала Cygwin Mintty, кажется, что программа зависает. Я могу видеть параметры и версию. Как будто он перестает писать в терминал, когда я запускаю оболочку.

У кого-нибудь еще была эта проблема, и если да, то как вы ее исправили? ТИА.

~>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 

Вот где он висит. Ниже приведены версии некоторых соответствующих программ.

~>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. 

РЕДАКТИРОВАТЬ : Когда я запускаю программу из командной строки Windows, программа работает. Вот что я должен увидеть:

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 

Когда я запускаю команду в cygwin, она никогда не попадает в оболочку; кажется, что он зависает, и мне нужно нажать CTRL + C, чтобы убить его и вернуться в командную строку bash.

7

4 ответа на вопрос

10
ak2

Интерактивная не-Cygwin программа часто не работает правильно в терминалах Cygwin, таких как mintty, которые основаны на устройствах псевдотерминалов ("pty"). Это потому, что Cygwin использует каналы Windows для эмуляции ptys, поэтому нативная консольная программа видит канал, в котором они ожидают увидеть консоль. Среди других проблем, которые часто заставляют их переходить в неинтерактивный режим. Смотрите здесь, чтобы узнать больше об этом:

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

Возможно, вы сможете заставить его работать сносно, используя -interactiveкоммутатор, но реальное решение - установить Cygwin-версию sqlite3 через Cygwin setup.exe .

Я смог заставить его работать, загрузив версию для сборки через Cygwin (ваш второй вариант). Я даже не думал об этом варианте, хе. Спасибо за отличное объяснение того, почему это не работает. Я тоже попробовал первый, и это отчасти сработало (как вы упомянули). Казалось, что была задержка "буфера", когда он выводил информацию на экраны после того, как вы преодолели некоторый порог символов. Еще раз спасибо. jmq 13 лет назад 0
Пожалуйста. Эта задержка вывода действительно связана с буферизацией: по умолчанию выходные потоки не буферизуются при подключении к консоли, но полностью буферизируются при подключении к каналу. ak2 13 лет назад 0
2
Chentuo

Start Cygwin with command

C:\cygwin\Cygwin.bat 

instead of

C:\cygwin\bin\mintty.exe 
Я не думаю, что это правильно. Использование того или иного способа запуска Cygwin не повлияет на то, как программа взаимодействует с вводом / выводом, что в данном случае является корневым случаем, как объяснено в разделе ak2 выше. Miserable Variable 6 лет назад 0
Для меня это решило проблему, поэтому, по крайней мере, * могло бы быть * правильным. ;-) Bowi 6 лет назад 0
0
therube

Не уверен, что я понимаю.

 ~>sqlite3 

Он "зависает" после второго ~> sqlite3?

В этот момент у вас больше не работает sqlite3? Он вернулся в подсказку. Первоначально все, что вы сделали, это отобразили справку, и программа вышла. Либо введите sqlite3.exe, либо отдельно, либо предоставьте базу данных для открытия, например sqlite3.exe place.sqlite. Тогда программа останется открытой в ожидании ваших команд.

(У меня нет знаний о cygwin или mintty, так что, возможно, меня это сбивает?)

Я набираю «sqlite3» в командной строке cygwin bash, и программа просто зависает. Я должен использовать CTRL + C, чтобы выйти и вернуться обратно в командную строку. Когда он начинает работать, ничего не происходит. jmq 13 лет назад 0
0
amphetamachine

Если вам не нужен SQLite для работы в Cygwin, драйвер SQLite ODBC для Windows может быть лучшим вариантом. Он обеспечивает собственный доступ к базам данных SQLite через ODBC через Windows, поэтому такие программы, как OpenOffice Base и Microsoft Access, а также многие другие могут подключаться и использовать их.