URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 3917
[ Назад ]

Исходное сообщение
"передать файл через буфер"

Отправлено Сеня , 21-Окт-12 13:25 
есть скрипт условно вида
echo "blablabla"> file1 | proga1 < file1 > file2

возник вопрос:
как скормить программе proga1  file1 не производя его запись на диск,поскольку диск ноутбучный ssd и запись пары миллиардов file убьют его нафиг :(
proga1 умеет брать данные только из файла
мысли решения кроме ram-диска не приходят,но явно же должен быть другой вариант



Содержание

Сообщения в этом обсуждении
"передать файл через буфер"
Отправлено XAnder , 22-Окт-12 10:03 
> echo "blablabla"> file1 | proga1 < file1 > file2
> как скормить программе proga1  file1 не производя его запись на диск,поскольку
> proga1 умеет брать данные только из файла
> мысли решения кроме ram-диска не приходят,но явно же должен быть другой вариант

Что если проге1 вместо настоящего файла подсунуть трубу (pipe, FIFO), а данные заливать в другой конец этой трубы? Как-то так (не проверял):

$ mkfifo pipe
$ proga1 pipe &
$ echo "blablabla" > pipe

С прогами, читающими файлы строго последовательно, такое обычно хорошо прокатывает.


"передать файл через буфер"
Отправлено Andrey Mitrofanov , 22-Окт-12 10:21 
>> echo "blablabla"> file1 | proga1 < file1 > file2
>> как скормить программе proga1  file1 не производя его запись на диск,поскольку
>> proga1 умеет брать данные только из файла
>> мысли решения кроме ram-диска не приходят,но явно же должен быть другой вариант
> Что если проге1 вместо настоящего файла подсунуть трубу (pipe, FIFO), а данные
> заливать в другой конец этой трубы? Как-то так (не проверял):

Он тащем-та это и написал. Только пару лишних под-строк '> file1' и '< file1' нагенерил:

echo "blablabla" | proga1 > file2

Некоторые эстеты написали бы даже:

proga1 <<<"blablabla" > file2


Далее... Перечитываею отквоченное и ещё раз перечитываю...

>> proga1 умеет брать данные только из файла

proga1 <( echo "blablabla" ) >file2

- даст проге именно имя _созданного _шелом пайпа в arg[1].


"передать файл через буфер"
Отправлено XAnder , 22-Окт-12 10:35 
> Он тащем-та это и написал. Только пару лишних под-строк '> file1' и
> '< file1' нагенерил:

Да нет, у него труба получилась бы безымянная, а proga1, судя по всему, хочет файл с именем из командной строки своей.

> echo "blablabla" | proga1 > file2
> Некоторые эстеты написали бы даже:
> proga1 <<<"blablabla" > file2

Эстетов оставим в покое :-)

> Далее... Перечитываею отквоченное и ещё раз перечитываю...
>>> proga1 умеет брать данные только из файла
> proga1 <( echo "blablabla" ) >file2
> - даст проге именно имя _созданного _шелом пайпа в arg[1].

Верно, но это же башизм, если мне не изменяет склероз.


"передать файл через буфер"
Отправлено Andrey Mitrofanov , 22-Окт-12 17:01 
> Верно, но это же башизм, если мне не изменяет склероз.

Глазасный! Углядел требование поссикс-совместимости в указании раздела = "(Разное)"?

___сработало - bash,zsh,ksh(ужос!"AT&T"?!), не сработало tcsh,dash


"передать файл через буфер"
Отправлено XAnder , 22-Окт-12 17:18 
>> Верно, но это же башизм, если мне не изменяет склероз.
> Глазасный! Углядел требование поссикс-совместимости в указании раздела = "(Разное)"?
> ___сработало - bash,zsh,ksh(ужос!"AT&T"?!), не сработало tcsh,dash

Эх... Ну да, каюсь, есть у меня бзик на совместимости. Даже если точно знаю, что мой скрипт нигде, окромя подконтрольных мне систем выполняться не будет. Однако же когда-то это мне сэкономило кучу времени при переезде с фряхи на линух. А главный минус заключается в том, что порою совершенно банальные скрипты в погоне за совместимостью разрастаются до галактических размеров.


"передать файл через буфер"
Отправлено Сеня , 22-Окт-12 17:13 
>[оверквотинг удален]
>> заливать в другой конец этой трубы? Как-то так (не проверял):
> Он тащем-та это и написал. Только пару лишних под-строк '> file1' и
> '< file1' нагенерил:
> echo "blablabla" | proga1 > file2
> Некоторые эстеты написали бы даже:
> proga1 <<<"blablabla" > file2
> Далее... Перечитываею отквоченное и ещё раз перечитываю...
>>> proga1 умеет брать данные только из файла
> proga1 <( echo "blablabla" ) >file2
> - даст проге именно имя _созданного _шелом пайпа в arg[1].

по разному крутил по всем вариантам самое безобидное получил Syntax error: "(" unexpected
proga1 имя файла хочет реальное
прикрутил пока через tmpfs -работает шустрее, но не по-человечески же это


"передать файл через буфер"
Отправлено XAnder , 22-Окт-12 17:37 
> по разному крутил по всем вариантам самое безобидное получил Syntax error: "("
> unexpected
> proga1 имя файла хочет реальное
> прикрутил пока через tmpfs -работает шустрее, но не по-человечески же это

1. Что за система, что за шелл? (ну там про телепатов и всё такое... :-)

2. Как крутили? Если хотите помощи, постарайтесь изложить, что уже успели предпринять, приведите команды, чтобы не повторяться.

3. Вот, проверил, работает:

$ mkfifo pipe
$ cat pipe > log &
$ echo "blablabla" > pipe
$ cat log
blablabla
[1] + Done                       cat pipe 1>log
$


"передать файл через буфер"
Отправлено Сеня , 22-Окт-12 17:53 

> 1. Что за система, что за шелл? (ну там про телепатов и
> всё такое... :-)

:) да понятно конечно
ubuntu 11.10  пробовал bash и даже csh

> 2. Как крутили? Если хотите помощи, постарайтесь изложить, что уже успели предпринять,
> приведите команды, чтобы не повторяться.

все три приведенных способа и пробовал
с echo и cat и у меня работает :) ,а вот с конкретной proga1 -не работает
выкрутился пока прогоном файлов через виртуалку (sudo mount -o remount,size=512m /dev/shm)


"передать файл через буфер"
Отправлено XAnder , 23-Окт-12 12:31 
> все три приведенных способа и пробовал
> с echo и cat и у меня работает :) ,а вот с
> конкретной proga1 -не работает

Значит эта прога или читает файл не строго последовательно или пытается определить его размер, или отображает файл в память или ещё как-то отклоняется от обычного простого поведения. Про FIFO можно забыть. Промежуточный файл всё равно придётся делать тем или иным образом.


"передать файл через буфер"
Отправлено pavel_simple , 25-Окт-12 07:30 
> есть скрипт условно вида
> echo "blablabla"> file1 | proga1 < file1 > file2
> возник вопрос:
> как скормить программе proga1  file1 не производя его запись на диск,поскольку
> диск ноутбучный ssd и запись пары миллиардов file убьют его нафиг
> :(
> proga1 умеет брать данные только из файла
> мысли решения кроме ram-диска не приходят,но явно же должен быть другой вариант

echo "blablabla" | proga1 /dev/stdin file2