我编写了一个QT GUI程序,按下按钮将执行.sh脚本。脚本的内容是 -
echo -e 'attach database 'testdatabase.db' as 'aj';\n.separator ","\n.import ora_exported.csv qt_ora_exported' | sqlite3 testdatabase.db
基本上脚本会将.csv导入sqlite数据库。当从linux终端($。/ script.sh)手动运行脚本文件(script.sh)时,它成功地将.csv文件导入到数据库表中。
但是,当我从我的QT程序中调用脚本时
void MainWindow::on_importButton_clicked()
{
QProcess process;
process.startDetached("/bin/sh",QStringList()<<"/home/aj/script.sh");
}
它成功编译,但在运行时按下按钮时会在控制台中显示错误消息。
错误:靠近第1行:接近&#34; - &#34;:语法错误 错误:无法打开&#34; ora_exported.csv&#34;
可能导致这个???
EDITED
我现在将.sh脚本更改为 -
echo -e 'attach database 'testdatabase.db' as 'aj';\n.separator ","\n.import /home/aj/ora_exported.csv qt_ora_exported' | sqlite3 testdatabase.db
因此提供了我的ora_exported.csv的路径。因此,运行时错误[错误:无法打开&#34; ora_exported.csv&#34;]已经消失,但另一条消息[错误:接近第1行:接近&#34; - &#34;:语法错误]是还在。
与之前的情况相同,使用./script.sh成功将数据导入sqlite3 db表文件但QProcess无法进行。
答案 0 :(得分:4)
echo
是shell的内置命令,可能表现不同。
E.g。拿这个测试脚本:echotest.sh
echo -e "123"
现在我们可以比较不同的结果:
$ bash echotest.sh
123
$ zsh echotest.sh
123
$ dash echotest.sh
-e 123
您可能在某些类似Ubuntu的操作系统上,其中/bin/sh
重定向到dash
。这可以解释“ - ”周围的错误。因此,如果您使用echo
,请特别设置shell或确保您的脚本适用于所有常见shell。
此外,你搞砸了你的报价
echo -e 'attach database 'testdatabase.db' as 'aj';\n.separator ","\n.import /home/aj/ora_exported.csv qt_ora_exported'
导致(第一行没有引号)
attach database testdatabase.db as aj;
.separator ","
.import /home/aj/ora_exported.csv qt_ora_exported
但你可能想要
echo -e "attach database 'testdatabase.db' as 'aj';\n.separator ','\n.import /home/aj/ora_exported.csv qt_ora_exported"
答案 1 :(得分:3)
void MainWindow::on_importButton_clicked()
{
QProcess::startDetached("/bin/sh",
QStringList()<<"/home/aj/script.sh",
"<location of: 'ora_exported.csv' file>");
}