Mintty.exe-通过 Windows 命令行传递脚本参数

Mintty.exe-通过 Windows 命令行传递脚本参数

我是 Cygwin 的新手,但在网上找不到任何可以满足我需求的东西。

我下载了这个脚本(MySQL 到 Sqlite)并能够使用以下命令在 Cygwin64 终端中成功运行它并获得转换后的数据库

./mysql2sqlite.sh -h 127.0.0.1 -u root -pMySecretPassword 数据库名称| sqlite3 数据库.sqlite

我希望使用来自 Windows 命令行或 .Net 应用程序中的参数调用此脚本。

这不起作用,但期望它能起作用

C:\cygwin64\bin\mintty.exe -e'/cygdrive/c/cygwin64/mysql2sqlite.sh'-h 127.0.0.1 -u root -pMySecretPassword 数据库名称|sqlite3 数据库.sqlite

在 mintty 中执行脚本并提供脚本所需参数的正确方法是什么?

答案1

我让它按照我想要的方式工作。

此脚本确实可以成功将 MySQL 数据库转换为 SQLite 数据库,但前提是 MySQL 数据库非常基础。MySQL 中有一些 SQLite 不支持的功能。比如触发器等。

我遇到的问题是,如何在 Windows 中自动执行此脚本,传入脚本所需的参数,以便 mysqldump 连接到 MySQL,以及 SQLite 获取数据并导入到新的 SQLite 数据库中。之前的尝试将 mysqldump 输出打印到控制台,而不是 SQLite3.exe

解决方案:

1)将mysql2sqlite.sh脚本保存到“C:\cygwin64\bin”

2)创建一个批处理文件(包含以下内容)并保存在“C:\cygwin64”中

@echo 关闭

设置脚本='/bin/mysql2sqlite.sh'

设置主机=%1%

设置用户=%2%

设置通过=%3%

设置数据库=%4%

设置参数=%script%-h%host%-u%user%-p%pass%%database%

C: chdir C:\cygwin64\bin

bash --login -i %params%|sqlite3 /cygdrive/c/cygwin64/%database%.db3

3)在 Windows 的任何地方调用此批处理文件

mysql_host mysql_user mysql_pass mysql_db

您可以扩展批处理文件以获取目标 SQLite 数据库保存目录的参数。

答案2

shell 命令中必须有管道符 (|)。根据您示例中的书写方式,管道符及其后面的内容是参数.exe二进制文件。

因此,尝试这样的操作:

C:\cygwin\bin\mintty.exe -h always -e /bin/sh -c \
'/cygdrive/c/cygwin64/mysql2sqlite.sh| /bin/sqlite3 database.sqlite'

确保管道出现在命令字符串那是之后的事-c


如果生成的数据库文件为空,则意味着脚本错误地将输出从 转换为mysqldump。 可以通过以下方式验证:

echo 'create table tbl1(one varchar(10), two smallint); ' | \
sqlite3 moo.db || echo  script failed

这意味着打印一些 SQL 命令,sqlite如果 sqlite 因错误退出则将它们提供给或(||)回显一些消息。

我尝试在 wordpress 数据库上运行转换脚本。结果是:

./mysql2sqlite.sh -h zzz.domeneshop.no -u xxx  -pyyy dbname |\
sqlite dbname.db 2> sqlite.errors || echo script failed
memory
script failed

这表明 AWK 程序存在缺陷。这是真的,因为错误日志确实有内容;

$ grep Error sqlite.errors
Error: near line 29: near "Y": syntax error
Error: near line 175: no such table: wp_options
Error: near line 176: no such table: wp_options
Error: near line 177: no such table: wp_options
Error: near line 178: no such table: wp_options
Error: near line 179: near "_transient_timeout_feed_mod_b9388c83948825c1edaef0d856b7b109": syntax error
Error: near line 191: no such table: wp_options
Error: near line 192: no such table: wp_options
(...)

因此结论是,这个模糊的脚本确实存在缺陷。sqlite 二进制文件无法解析 mysgl2sqlite.sh 脚本的输出。

相关内容