![sqlite3 명령줄 - 한 단계로 스키마를 설정하고 가져오는 방법](https://linux55.com/image/133890/sqlite3%20%EB%AA%85%EB%A0%B9%EC%A4%84%20-%20%ED%95%9C%20%EB%8B%A8%EA%B3%84%EB%A1%9C%20%EC%8A%A4%ED%82%A4%EB%A7%88%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EA%B3%A0%20%EA%B0%80%EC%A0%B8%EC%98%A4%EB%8A%94%20%EB%B0%A9%EB%B2%95.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 이스케이프와 함께 이 문자열을 사용하십시오(지원하는 쉘에서):
sqlite3 test.db <<<$'.mode csv\n.import /tmp/deleteme.csv users\n'