7

Я пытаюсь использовать командную оболочку 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.

4 ответа4

10

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

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

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

2

Запустите Cygwin с помощью команды

C:\cygwin\Cygwin.bat

вместо

C:\cygwin\bin\mintty.exe
0

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

 ~>sqlite3

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .