Cada parte de um pipeline (ou seja, cada lado do pipe) é executada em um processo separado (chamado de subshell, quando um shell garfos um subprocesso para executar parte do script). Em par_set PIPE FAILS |sed -e's/FAILS/BARFS/'
, a variável PIPE
é configurada no subprocesso que executa o lado esquerdo do canal. Essa alteração não é refletida no processo pai (as variáveis de ambiente não são transferidas entre processos, elas são herdadas apenas por subprocessos.
O lado esquerdo de um tubo sempre é executado em uma subcamada. Algumas shells (ATT ksh, zsh) executam o lado direito nas shells pai; a maioria também executa o lado direito em um subnível.
Se você quer redirecionar a saída de uma parte do script e executar essa parte no shell pai, em ksh / bash / zsh, você pode usar substituição de processos .
par_set PROCESS SUBSTITUTION > >(sed s/ION/ED/)
Com qualquer shell POSIX, você pode redirecionar a saída para um pipe nomeado.
mkfifo f
<f grep NAMED= &
par_set NAMED PIPE >f
Ah, e você está perdendo aspas em torno de substituições de variáveis , seu código quebra em coisas como par_set name 'value with spaces' star '*'
.
export "${PAR}=${VAL}"
…
par_set "$@"