如何强制让mysql.exe运行在“交互”模式下?

5
我希望在Windows XP中使emacs sql-mysql模式正常工作。我能够成功进入sql-mysql模式并连接到mysql数据库。问题是SQL缓冲区没有显示“mysql>”提示符。换句话说,它没有与mysql.exe交互。我认为这是因为当emacs在后台启动mysql.exe程序时,它进入了“非交互”模式。似乎没有任何mysql选项有所帮助。有什么解决办法吗?我可以看到这可能会成为emacs comint模式与Windows中的其他命令行实用程序交互的问题,所以也许有一个操作系统级别的解决方案?
2个回答

3
问题在于Emacs内置终端使用管道与客户端进程通信。Mysql.exe是本地Windows程序,因此isatty()实际上检查的是相关文件描述符/句柄是否为控制台。这在管道上失败,因此mysql进入批处理模式。我无法看到强制交互模式的方法。遗憾的是,因为很可能很容易实现,所以这是可惜的。

在xterm或其他基于Cygwin ptys的终端中运行它将显示相同的问题,因为Cygwin的pty仿真基于Windows管道。


好吧,这不是我希望得到的答案,但感谢您的解释。 - Upgradingdave

2

如果你不从(伪)终端运行它,实际上是没有办法的。它通过isatty检查文件描述符0 1,并且如果它们中至少有一个不是终端,则设置批处理模式。另一方面,您可以强制执行批处理模式。

无论如何,这很有道理,因为用于提示的readline需要一个终端才能正常工作。因此,修复此问题的正确方法是在伪终端中运行它。


谢谢你提供的信息,Michal。我从cygwin开始使用emacs。你有什么办法告诉emacs在伪终端内运行mysql吗?或者我能否通过欺骗isatty始终返回1来实现?(正如你可能已经发现的那样,我对cygwin不是很熟悉) - Upgradingdave
在xterm内运行它或类似的东西。我真的不太了解Cygwin。 - Michal Čihař
示例用例:“ssh root@example.com mysql” - 因此您拥有交互式 shell,但 mysql 处于非交互模式。 - Valerio Bozz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接