In Linux or WSL (Windows Subsystem for Linux) the less than or left angle bracket < is used for input redirection.
sqlite3 ex1.db < ex1.sql
Run the same command in PowerShell, and you will get the following error:
The '<' operator is reserved for future use. + CategoryInfo : ParserError: (:) , ParentContainsErrorRecordException + FullyQualifiedErrorId : RedirectionNotSupported'
In the LSQLTHW book Zed has listed the following alternative:
sqlite3 ex1.db -init ex1.sql
and it works!
But if like me you want to be rebellious and use the native redirection of PowerShell.
Then you need to use the pipe operator | like this:
Get-Content ex1.sql | sqlite3 ex1.db
Get-Content loads the file into the PowerShell pipeline and the pipe | command pipes the data to the stdinput of the next command.
If you spend a lot of time using PowerShell, this may be the preferred way of doing it as it is consistent with other native PowerShell commands.
But that is longer to type!!!
Get-Content can be shortened to GC using the built-in alias.
gc ex1.sql | sqlite3 ex1.db
Still too long?
Add your own alias for sqlite3
New-Alias -Name SQL3 -Value "sqlite3" # remember to save this to you PowerShell profile.
Now in PowerShell we get this:
gc ex1.sql | sql3 ex1.db
Short enough to type over and over again and uses the native input redirection.
NOTE: It is assumed in the above commands that sqlite3.exe is in your windows path.