
私は仕事で 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 スキルを持つ誰かが、より洗練された解決策を持っていることを期待していました。
注記:インポートしたいデータは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 ハックがそのプラットフォームで動作しない場合は、一時ファイルの代わりに名前付きパイプを使用するのはいかがでしょうか。2 つのプログラムの観点からはファイルのように動作しますが、実際のディスクへの書き込みやディスクからの読み取りは行われません。