sqlite3 echo和'<'管道命令无法按预期工作

时间:2013-02-20 05:10:07

标签: sql bash ubuntu sqlite

我正在阅读SQL book并且作者正在使用Sqlite3,这很棒,因为没有服务器可以搞乱。

在作者所说的书中输入:

sqlite3 -echo something.db < some.sql

问题是没有任何东西回到终端也没有甚至是从'&lt;'创建的数据库重定向命令。

有人知道发生了什么......用这个吗?

3 个答案:

答案 0 :(得分:0)

something.db是现有数据库。 < some.sql表示从该文件中选取数据并将其写入sqlite控制台。所以这两个文件都必须存在。

something.db必须是有效的l sqlite3数据库文件(或空的或不存在的文件); some.sql必须是包含命令的文本文件。

-echo参数指定必须在执行前打印命令。

答案 1 :(得分:0)

实际上,您显示的命令是从sql dump创建新数据库的正确方法。

你能否展示你的sql文件内容(cat some.sql)?我可以重现所描述的行为的唯一方法是向sqlite提供一个空的sql文件。

尝试此命令,看看是否可以得到相同的结果:

$ cat <<EOF > test.sql
> create table test1 (f1, f2, f3);
> insert into test1(f1, f2, f3) values ("foo", "bar", "baz");
> EOF
$ sqlite3 -echo test.db < test.sql
create table test1 (f1, f2, f3);
insert into test1(f1, f2, f3) values ("foo", "bar", "baz");
$ file test.db
test.db: SQLite 3.x database

答案 2 :(得分:0)

根据您的评论和您的终端屏幕截图,我的印象是您的“some.sql”文件可能编码错误和/或以BOM开头,这会混淆sqlite。

您可以使用file命令查找,如果出现问题,请使用iconvrecode或您喜欢的文本编辑器将文件转换为您的终端所需的编码,以及正确的行结尾(Linux中为\n又名“LF”,Windows中为\r\n又称为“CRLF”。