Lado esquerdo do tubo é o subshell?
Editar
Meu comentário abaixo sobresed 's@^@ @' <(f1)
está incorreto Enquanto$BASH_SUBSHELL
indica que estamos no mesmo nível que o lançamento, as variáveis são perdidas no script principal. com base na resposta de Gordon testeif1 > >(sed 's@^@ @')
em vez disso, e isso parece funcionar corretamente. Ainda assim, BASH_SUBSHELL não deve ser 1 e não 0 para o primeiro formulário?
Considere este pequeno teste
#!/bin/bash
declare -i i=0
function f1()
{
let i++
echo "In f1, SUBSHELL: $BASH_SUBSHELL, i=$i" >&2
}
f1
f1 | sed 's@^@ @'
echo "at end, i=$i"
com a seguinte saída:
In f1, SUBSHELL: 0, i=1
In f1, SUBSHELL: 1, i=2
at end, i=1
(o objetivo dosed
é apenas para ter um canal para alguma coisa, não espere que ele faça alguma coisa, porque f1 gera stder
A função f1 registra o BASH_SUBSHELL atual e o valor atual de i
Sei porque no final do script obtemosi=1
, porque a segunda invocação estava em uma subcamada e o valor de i na subcamada 1 foi perdid
O que eu não sei é por que o lado esquerdo do tubo não foi executado no shell atual
Eu imaginei que poderia evitar isso comsed 's@^@ @' <(f1)
Gostaria de saber por que o lado esquerdo não está no mesmo nível do script principal