Я играл с 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-fu будет более элегантное решение.
нота: данные, которые я хотел бы импортировать, предоставляются только через STDOUT, поэтому эхо 'тест' команда все о.
Разъяснение - У меня есть контроль только над командами с правой стороны канала, показанного выше. Данные обрабатываются, а затем передаются моей команде через stdin / stdout. команда echo 'test' носит исключительно иллюстративный характер.
Если хаки STDIN не работают на этой платформе, как насчет использования именованного канала вместо временного файла? С точки зрения двух программ он будет вести себя как файл, но без фактической записи на диск и чтения с него.
Основываясь на ответах выше:
... | sqlite3 test.db 'import '<(cat -)' test'
Я тестировал это в своей системе, и, похоже, он делает то, что вы хотите.
Если вы на самом деле используете Bash, а AIX поддерживает подстановку процессов (которая, как мне кажется, зависит от платформы), это может сработать для вас:
Демо:
cat <(echo 'test')
Ваша команда:
sqlite3 test.db '.import '<(echo test)' test'