特定於 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

現在,是嗎需要使用標準輸入?這個臨時文件還不夠嗎?可能吧,但我希望有更好的 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 hack 在該平台上不起作用,那麼使用命名管道而不是臨時檔案怎麼樣?從兩個程式的角度來看,它的行為就像一個文件,但沒有實際寫入磁碟和從磁碟讀取。

相關內容