![sqlite3 命令行 - 如何一步设置模式并导入](https://linux22.com/image/133890/sqlite3%20%E5%91%BD%E4%BB%A4%E8%A1%8C%20-%20%E5%A6%82%E4%BD%95%E4%B8%80%E6%AD%A5%E8%AE%BE%E7%BD%AE%E6%A8%A1%E5%BC%8F%E5%B9%B6%E5%AF%BC%E5%85%A5.png)
我需要能够通过命令行一步完成此操作:
lab-1:/etc/scripts# sqlite3 test.db
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> .mode csv ;
sqlite> .import /tmp/test.csv users
sqlite> select * from users;
John,Doe,au,0,"",1,5555,91647fs59222,audio
sqlite> .quit
我尝试过以下方法:
lab-1:/etc/scripts# sqlite3 test.db ".mode csv ; .import /tmp/deleteme.csv users"
和
lab-1:/etc/scripts# sqlite3 test.db ".mode csv .import /tmp/deleteme.csv users"
我没有收到错误,但最终用户表中也没有任何数据。
任何提示将不胜感激。
答案1
SQLite 元命令不是由换行符;
而是由换行符终止。因此,您必须以其他方式提供命令,以便将换行符插入到正确的位置。
这里有几个例子,我可能会使用第一个(因为它是可读的)。
使用此处文档:
sqlite3 testdb <<END_COMMANDS .mode csv .import /tmp/deleteme.csv users END_COMMANDS
使用以下命令格式化命令
printf
:printf '.mode csv\n.import /tmp/deleteme.csv users\n' | sqlite3 test.db
使用带有 C 转义符的此处字符串(在支持它的 shell 中):
sqlite3 test.db <<<$'.mode csv\n.import /tmp/deleteme.csv users\n'