
Ich habe bei der Arbeit mit SQlite herumgespielt und insbesondere versucht, das Befehlszeilentool sqlite3 dazu zu bringen, stdin anstelle einer Datei zu akzeptieren. Klingt einfach genug, unter Linux können Sie einen Befehl wie diesen ausführen:
echo 'test' | sqlite3 test.db '.import /dev/stdin test'
leider laufen unsere Maschinen bei der Arbeit unter AIX (5 & 6) und soweit ich weiß, gibt es kein Äquivalent zur virtuellen Datei /dev/stdin. Ich habe es geschafft, einen äquivalenten Befehl zusammenzuhacken, der unter AIX mit einer temporären Datei funktioniert.
echo 'test' | cat - > /tmp/blah ; sqlite3 test.db '.import /tmp/blah test' ; rm /tmp/blah
Nun, tut esbrauchenum STDIN zu verwenden? Reicht diese Sache mit der temporären Datei nicht aus? Wahrscheinlich, aber ich hatte gehofft, dass jemand mit besseren Unix-Kenntnissen eine elegantere Lösung hat.
Notiz:die Daten, die ich importieren möchte, werden nur über STDOUT bereitgestellt, daherEcho 'Test'Befehl ist alles.
Klärung- Ich habe nur Kontrolle über Befehle auf der rechten Seite der oben gezeigten Pipe. Die Daten werden verarbeitet und dann über stdin/stdout an meinen Befehl übergeben. Der Echo-Befehl „test“ dient nur zur Veranschaulichung.
Antwort1
Wenn Sie tatsächlich Bash verwenden und AIX Prozesssubstitution unterstützt (was meiner Meinung nach plattformabhängig ist), könnte dies für Sie funktionieren:
Demo:
cat <(echo 'test')
Ihr Befehl:
sqlite3 test.db '.import '<(echo test)' test'
Antwort2
Basierend auf den obigen Antworten:
... | sqlite3 test.db 'import '<(cat -)' test'
Ich habe dies auf meinem System getestet und es scheint zu tun, was Sie wollen.
Antwort3
Wenn die STDIN-Hacks auf dieser Plattform nicht funktionieren, wie wäre es dann mit einer benannten Pipe anstelle der temporären Datei? Sie würde sich aus Sicht der beiden Programme wie eine Datei verhalten, allerdings ohne das tatsächliche Schreiben auf und Lesen von der Festplatte.