Трубка (|) должна быть в команде оболочки. То, как оно написано в вашем примере, символ канала и последующие аргументы являются аргументами для двоичного .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.