LINUX.ORG.RU
ФорумAdmin

Как подсунуть имя временного пайпа как параметр командной строки?

 


0

1

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

т.е. если обычно команда выглядит так:

compiler source.c

а мне нужно, как-то сгенерировать имя для временного пайпа, чтобы передать его в $( )

compiler $( ??? iconv ... input.file )

compiler <(iconv foo.bar)

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

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от anonymous

Gcc, clang могут читать из пайпа.

даже лучше, есть -finput-charset=charset -fexec-charset=charset

vodz ★★★★★ ()
Ответ на: комментарий от legolegs
<( )

process substitution
http://tldp.org/LDP/abs/html/process-sub.html

это не то что нужно, мне так кажется, потому что в итоге вывод (stdout) от iconv подаётся на stdin для compiler.

А у меня как раз проблема в том, чтобы обойти тот факт, что compiler не умеет работать со stdin, только с параметрами

Einstok_Fair ★★☆ ()
Ответ на: комментарий от Einstok_Fair

это не то что нужно

$ cat arg.sh
#!/bin/sh

echo "$#: $*"
$ ./arg.sh <(cat arg.sh)
1: /dev/fd/63

Как видите, это генерит с «именем файла». Не везде, без гарантий. Но это на самом деле ссылка на fifo. Так что все фокусы с невозможностью второго прохода будут на лицо.

vodz ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от Einstok_Fair

Аноним прав, через make можно сделать чище и понятнее, и без башизмов типа <(...).

a.out: source.ut8.c
    compiler $<
source.ut8.c: source.c
    iconv ... < $< > $@
legolegs ★★★★★ ()

iconv input.file | compiler - не канает?
В крайнем случае всегда можно сделать что-то вроде iconv input.file > temp.file && compiler temp.file && rm temp.file хоть через тот же make

MrClon ★★★★★ ()

Пиздец. Ламеров полон тред.

iconv .... | compiler /dev/stdin

anonymous ()
Ответ на: комментарий от Einstok_Fair

Рядом с тобой любой школьник - гений.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.