Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm been playing around with SQlite at work, specifically with trying to get the sqlite3 command line tool to accept stdin instead of a file. Sounds easy enough, on linux you can execute a command like:

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

unfortunately - our machines at work run AIX (5 & 6) and as far as I can tell, there is no equivalent to the virtual file /dev/stdin. I managed to hack together an equivalent command that works on AIX using a temporary file.

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

Now, does it need to use STDIN? isn't this temporary file thing enough? Probably, but I was hoping someone with better unix-fu had a more elegant solution.

note: the data I would like to import is only provided via STDOUT, so that's what the echo 'test' command is all about.

Clarification - I only have control over commands on the Right Hand Side of the pipe shown above. The data is being processed, and then passed to my command via stdin/stdout. the echo 'test' command is illustrative only.

share|improve this question
    
I'm assuming there's a typo in your second command. Where it says "/dev/stdin" should it say "/tmp/blah"? –  Dennis Williamson Jun 9 '10 at 11:23
    
hahhah - yeah it totally should, i reread that a bunch of times. –  mikfreedman Jun 9 '10 at 13:16
    
Does AIX have /dev/fd/? If so, then /dev/fd/0 should be the same as /dev/stdin. –  larsks Nov 18 '10 at 2:47

3 Answers 3

If the STDIN hacks aren't working on that platform, how about using a named pipe instead of the temp file? It'd behave from the perspective of the two programs like a file, but without the actual writing to and reading from disk.

share|improve this answer

Based on the answers above:

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

I've tested this on my system and it appears to do what you want.

share|improve this answer

If you're actually using Bash and AIX supports process substitution (which I believe is platform dependent), this might work for you:

Demo:

cat <(echo 'test')

Your command:

sqlite3 test.db '.import '<(echo test)' test'
share|improve this answer
    
the echo test bit unfortunately isn't another unix command line tool - it's some random program that communicates via stdin/stdout, but has a convoluted execution framework that wouldn't allow it to be called that way, if that makes sense. –  mikfreedman Jun 9 '10 at 13:18
    
@mikfreedman: I don't understand. If it can be called in a pipeline, it can be called using process substitution. Also, in your second command in your question why use cat -? Why not echo 'test' > /tmp/blah? –  Dennis Williamson Jun 9 '10 at 13:43
    
in the program I am using, I can enter a unix command that the program will write to, the only requirement is this program can only write to STDOUT.. so, it's arriving at my arbitrary command via a pipe, but the order must be as I described. For reference the program I am using is Infosphere DataStage. –  mikfreedman Jun 9 '10 at 14:08

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.