在 Cygwin 中使用 SQLite3

在 Cygwin 中使用 SQLite3

我正在尝试在 cygwin 中将 sqlite3.exe 命令 shell 与 mintty 终端结合使用。我尝试从 Windows 命令提示符中使用该程序,它可以正常工作。当我尝试从 cygwin mintty 终端使用它时,该程序似乎挂起了。我可以看到参数和版本。当我运行 shell 时,它好像停止写入终端。

以前有没有其他人遇到过这个问题?如果有,您是怎么解决的?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

这就是它挂起的地方。以下是一些相关软件的版本。

~>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 中运行命令时,它从未进入 shell;它似乎挂断了,我必须使用 CTRL + C 来终止它并返回到 bash 命令提示符。

答案1

交互式非 Cygwin 程序通常无法在基于伪终端(“pty”)设备的 Cygwin 终端(如 mintty)中正常工作。这是因为 Cygwin 使用 Windows 管道来模拟 pty,因此本机控制台程序在它们期望看到控制台的地方看到了管道。除其他问题外,这通常会导致它们进入非交互模式。有关此内容的更多信息,请参见此处:

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

您可能能够使用开关使其正常工作-interactive,但真正的解决方案是通过 Cygwin 安装 Cygwin 版本的 sqlite3安装程序

答案2

使用命令启动 Cygwin

C:\cygwin\Cygwin.bat

代替

C:\cygwin\bin\mintty.exe

答案3

我不确定我是否理解了。

 ~>sqlite3

它在第二个 ~>sqlite3 之后“挂起”?

此时,您不再运行 sqlite3 了,对吧?它已返回提示符。最初,您所做的只是显示它的帮助,然后程序退出。要么单独输入 sqlite3.exe,要么提供要打开的数据库,例如 sqlite3.exe places.sqlite。然后程序将保持打开状态,等待您的命令。

(我对 cygwin 或 mintty 一无所知,所以这可能会让我困惑?)

答案4

除非你特别需要 SQLite 在 Cygwin 中工作,适用于 Windows 的 SQLite ODBC 驱动程序可能是更好的选择。它允许 Windows 本机通过 ODBC 访问 SQLite 数据库,以便 OpenOffice Base 和 Microsoft Access 等程序以及许多其他程序可以连接和使用它们。

相关内容