O comando em uma substituição de processo é chamado em uma subshell?

1

Do manual bash

Process substitution is supported on systems that support named pipes (fifos) or the /dev/fd method of naming open files. It takes the form of

<(list)

or

>(list)

The process list is run with its input or output connected to a fifo or some file in /dev/fd. The name of this file is passed as an argument to the current command as the result of the expansion.

É o comando list em uma substituição de processo <(list) ou >(list) invocado em uma subshell, similarmente a uma substituição de comando, comandos agrupados com parênteses e  comandos assíncronos? Semelhante ao manual do bash diz

Command substitution, commands grouped with parentheses, and asynchronous commands are invoked in a subshell environment that is a duplicate of the shell environment, except that traps caught by the shell are reset to the values that the shell inherited from its parent at invocation.

  1. A resposta pode ser sim, porque

    • a substituição do processo é semelhante à substituição de comando,

    • alguma fonte diz que

      the command inside it is run in the background.

    e a segunda citação acima do manual bash diz que ambos os comandos Comandos de substituição e de fundo são invocados em subshells.

  2. A resposta pode ser não, porque

    • No manual bash, eu não vi que uma substituição de processo é mencionada na segunda citação acima do manual bash,

    • e alguma fonte diz que a substituição do processo

      is especially important for bypassing subshells caused by pipelines

      embora eu não tenha certeza se "ignorar subshells" significa não ser invocado em uma subshell.

por Tim 18.12.2016 / 08:05

1 resposta

3

Executando o shell atual em strace(1) e, em seguida, executando, e. <(command) dá:

clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fa6713d59d0) = 13305

Do ponto de vista puramente de definição, já que o clone (2) é definido como

create a child process

e um subshell como

Running a shell script launches a new process, a subshell.

pode-se dizer que sim - a substituição do processo em execução é chamada como um subnível.

    
por 18.12.2016 / 11:09