特定于 AIX 的 SQLite/STDIN 难题

特定于 AIX 的 SQLite/STDIN 难题

我在工作中一直在尝试使用 SQlite,特别是尝试让 sqlite3 命令行工具接受 stdin 而不是文件。听起来很简单,在 Linux 上你可以执行如下命令:

echo 'test' | sqlite3 test.db '.import /dev/stdin test'

不幸的是 - 我们工作中的机器运行的是 AIX(5 和 6),据我所知,没有与虚拟文件 /dev/stdin 等效的命令。我设法使用临时文件拼凑出一个在 AIX 上运行的等效命令。

echo 'test' | cat - > /tmp/blah ; sqlite3 test.db '.import /tmp/blah test' ; rm /tmp/blah

现在,需要使用 STDIN?这个临时文件还不够吗?可能吧,但我希望有更好的 unix-fu 的人能有更优雅的解决方案。

笔记:我想要导入的数据仅通过 STDOUT 提供,因此回显‘测试’命令就是一切。

澄清- 我只能控制上面显示的管道右侧的命令。数据正在被处理,然后通过 stdin/stdout 传递给我的命令。echo 'test' 命令仅供参考。

答案1

如果您实际上正在使用 Bash,并且 AIX 支持进程替换(我认为这与平台有关),那么这可能适合您:

演示:

cat <(echo 'test')

您的命令:

sqlite3 test.db '.import '<(echo test)' test'

答案2

根据以上答案:

... | sqlite3 test.db 'import '<(cat -)' test'

我已经在我的系统上测试过它并且它似乎可以实现你想要的功能。

答案3

如果 STDIN 黑客无法在该平台上工作,那么使用命名管道代替临时文件怎么样?从两个程序的角度来看,它的行为就像一个文件,但没有实际的写入和读取磁盘。

相关内容