在 Cygwin 中使用 SQLite3

jmq*_*jmq 7 cygwin bash sqlite mintty

我正在尝试在 cygwin 中使用带有 mintty 终端的 sqlite3.exe 命令外壳。我从 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
Run Code Online (Sandbox Code Playgroud)

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

~>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.
Run Code Online (Sandbox Code Playgroud)

编辑:当我从 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
Run Code Online (Sandbox Code Playgroud)

当我在 cygwin 中运行命令时,它永远不会进入 shell;它似乎挂断了,我必须按 CTRL + C 来终止它并返回到 bash 命令提示符。

ak2*_*ak2 10

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

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

您可能可以使用-interactiveswitch让它正常工作,但真正的解决方案是通过 Cygwin setup.exe安装 SQLite3 的 Cygwin 版本。