2016-08-05 4 views
4

<(commands ...) в bash/zsh делает поведение вывода в виде файла. Существует ли эквивалент POSIX?Оболочка POSIX, эквивалентная <()

+4

[POSIX не определяет замену процесса, но вы можете использоваться именованные каналы, чтобы сделать то же самое.] (Http://mywiki.wooledge.org/ProcessSubstitution) – bishop

+0

Возможный дубликат [Возможно ли подражать замене процесса на msys/mingw (с bash 3.x)] (http://stackoverflow.com/questions/20866832/is-it-possible-to-mimic- process-substitution-on-msys-mingw-with-bash-3-x) –

+1

@PP, я не очень люблю этот конкретный потенциальный обман, поскольку он сбрасывает некоторые неправильные представления (среди них, что b зола 3.x * не поддерживает замену процесса; это ограничение msys, в отличие от версии, основанной на версии). –

ответ

10
mkfifo foo.fifo 

## if your "commands" is multiple commands 
# { commands ...; } >foo.fifo & 

# otherwise, if it's just one 
commands ... >foo.fifo & 

something_else foo.fifo 

ближайший доступный эквивалент

something_else <(commands ...) 
+0

Возможными улучшениями «устойчивости» было бы использовать что-то вроде 'mktemp' для создания каталога для одного из более надежных каналов от конфликтов (или просто для создания имени, используемого для канала, поскольку' mkfifo' является атомарным) и т. Д. В действительности, это все '<(...)' делает за кулисами: это просто синтаксический сахар для более надежного варианта этого ответа. – mtraceur

+1

@mtraceur, вот что '<(...)' делает за кулисами * на платформах, где '/ dev/fd' недоступен *; он использует 'pipe (2)' анонимные пары дескрипторов, где он есть. –

+0

Справа. Спасибо за исправление - я все это забыл. – mtraceur

Смежные вопросы