DEV Community

Meet Rajesh Gor
Meet Rajesh Gor

Posted on • Originally published at meetgor.com

SQLite dot commands: read command is recursive?

Yesterday, while exploring the .read command I discovered a little hack.

We know you can read arbitrary sqlite shell commands from the .read | operator, even the dot commands.

So, you can even use .read itself again. Which means we can call the same file to read inside the script.

Ops!

Let's create a file called loop.sh this will emit certain valid sql/sqlite commands like so:

#!/bin/bash
echo "SELECT 'hello, world!';"
echo ".read |./loop.sh"
Enter fullscreen mode Exit fullscreen mode

The first will print out "SELECT 'hello world!';" so when directed to the shell, it will be executed and print "hello, world!"

Then the 3rd line echo ".read |./loop.sh" is the magic, it will execute the script again right?

Because it's a valid sqlite shell command and it will execute it. It will take the read command and print everything when executing the loop.sh shell script.

What's the output?

$ cat loop.sh
#!/bin/bash
echo "SELECT 'hello, world!';"
echo ".read |./loop.sh"

$ sqlite3
SQLite version 3.50.4 2025-07-30 19:33:53
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .read |./loop.sh
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
hello, world!
Input nesting limit (25) reached at line 2. Check recursion.
sqlite>
Enter fullscreen mode Exit fullscreen mode

Well, SQLite developers are smarter to handle the edge case I think. :)

This is a little fun, but it's kind of a quirk, an not-so easter egg but interesting thing to know.

Read the entire blog post here with interactive SQL codeblocks and playground like environment

Top comments (0)