
He estado jugando con SQlite en el trabajo, específicamente intentando que la herramienta de línea de comandos sqlite3 acepte stdin en lugar de un archivo. Suena bastante fácil, en Linux puedes ejecutar un comando como:
echo 'test' | sqlite3 test.db '.import /dev/stdin test'
desafortunadamente, nuestras máquinas en el trabajo ejecutan AIX (5 y 6) y, hasta donde yo sé, no existe un equivalente al archivo virtual /dev/stdin. Logré crear un comando equivalente que funciona en AIX usando un archivo temporal.
echo 'test' | cat - > /tmp/blah ; sqlite3 test.db '.import /tmp/blah test' ; rm /tmp/blah
Ahora, ¿lo hace?necesidadutilizar STDIN? ¿No es suficiente este archivo temporal? Probablemente, pero esperaba que alguien con mejor Unix-fu tuviera una solución más elegante.
nota:los datos que me gustaría importar solo se proporcionan a través de STDOUT, así que eso es lo queeco 'prueba'se trata el comando.
Aclaración- Sólo tengo control sobre los comandos en el lado derecho de la tubería que se muestra arriba. Los datos se procesan y luego se pasan a mi comando a través de stdin/stdout. El comando echo 'test' es sólo ilustrativo.
Respuesta1
Si realmente estás usando Bash y AIX admite la sustitución de procesos (que creo que depende de la plataforma), esto podría funcionar para ti:
Manifestación:
cat <(echo 'test')
Tu comando:
sqlite3 test.db '.import '<(echo test)' test'
Respuesta2
Basado en las respuestas anteriores:
... | sqlite3 test.db 'import '<(cat -)' test'
Probé esto en mi sistema y parece hacer lo que quieres.
Respuesta3
Si los hacks STDIN no funcionan en esa plataforma, ¿qué tal si usamos una canalización con nombre en lugar del archivo temporal? Se comportaría desde la perspectiva de los dos programas como un archivo, pero sin escribir ni leer desde el disco.