我试图通过调用wsh jscript文件来转储mysql数据库,但它不起作用。
我有这个代码,用git shell调用,它运行得很完美:
# If something fails, exit with status other than 0
set -e
# select dump directory
cd "$(git rev-parse --show-toplevel)"
# first, remove our original schema
rm -f "WebShop\DataBase\backup.sql"
# generate a new schema
exec "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" --skip-comments -u root --password=root webshopdb |sed 's$),($),\n($g' > "WebShop\DataBase\backup.sql"
我在WSH中尝试了几乎相同的代码,但它只返回转储文件的标头,并且不会创建文件。我不知道什么是错误的,或者如何调试代码...:S
var shellObj = WScript.CreateObject('WScript.Shell');
var exec = shellObj.Exec(
'"C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe"'+
" --skip-comments -u root --password=root webshopdb |sed 's$),($),\\n($g' > " +
'"D:\\creation\\software developer\\projects\\webshop-refactoring-project\\document root\\WebShop\\DataBase\\backup.sql"'
);
WScript.Echo(exec.StdOut.ReadAll());
我也尝试使用bat文件和cmd文件,但是他们无法处理pathes中的空间。
有人可以帮忙吗?
(对我来说,以某种方式从git代码制作可执行文件就足够了,或者让wsh工作......完美的解决方案就是如果我可以从netbeans调用转储,但在生活中没有什么是理想的。 ..:D)
答案 0 :(得分:1)
我用文件关联制作了它。
我创建了一个git.bat文件:
if not exist %1 exit
set bash=C:\Program Files (x86)\Git\bin\bash.exe
"%bash%" --login -i -c "exec "%1""
并将其与.hook文件相关联。
之后我创建了一个测试dump.hook文件:
#!/bin/sh
cd "D:/creation/software developer/projects/webshop-refactoring-project/document root/WebShop";
cd "$(git rev-parse --show-toplevel)"
rm -f "WebShop/DataBase/backup.sql"
exec "C:/Program Files/MySQL/MySQL Server 5.5/bin/mysqldump.exe" --skip-comments -u root --password=root webshopdb |sed 's$),($),\n($g' > "WebShop/DataBase/backup.sql"
exit
它完美无缺。
3天后我得到了它!哇噢! :d
注意:* Windows命令提示符通常在路径名中有空格和特殊字符的问题,因此使用git的模拟linux要比尝试修复它容易得多。也可以将.hook文件导入预提交git钩子,因此它可以通过每次提交自动转储数据库模式...(也许git add不能通过这些文件工作,我还没有找到一个自动转储和提交解决方案:git pre-commit + mysqldump: cannot find path, not existing command)*