Um enigma SQLite/STDIN, específico para AIX

Um enigma SQLite/STDIN, específico para AIX

Estou brincando com o SQlite no trabalho, especificamente tentando fazer com que a ferramenta de linha de comando sqlite3 aceite stdin em vez de um arquivo. Parece fácil, no Linux você pode executar um comando como:

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

infelizmente - nossas máquinas em funcionamento executam AIX (5 e 6) e, pelo que sei, não há equivalente ao arquivo virtual /dev/stdin. Consegui hackear um comando equivalente que funciona no AIX usando um arquivo temporário.

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

Agora, será queprecisarusar STDIN? esse arquivo temporário não é suficiente? Provavelmente, mas eu esperava que alguém com melhor unix-fu tivesse uma solução mais elegante.

observação:os dados que eu gostaria de importar são fornecidos apenas via STDOUT, então é isso que oecoar 'teste'comando tem tudo a ver.

Esclarecimento- Eu só tenho controle sobre os comandos do lado direito do tubo mostrado acima. Os dados estão sendo processados ​​e depois passados ​​para meu comando via stdin/stdout. o comando echo 'test' é apenas ilustrativo.

Responder1

Se você estiver realmente usando Bash e o AIX suporta substituição de processos (que acredito ser dependente da plataforma), isso pode funcionar para você:

Demonstração:

cat <(echo 'test')

Seu comando:

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

Responder2

Com base nas respostas acima:

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

Eu testei isso no meu sistema e parece fazer o que você deseja.

Responder3

Se os hacks STDIN não estão funcionando nessa plataforma, que tal usar um pipe nomeado em vez do arquivo temporário? Ele se comportaria da perspectiva dos dois programas como um arquivo, mas sem a gravação e leitura reais do disco.

informação relacionada