begin; cmd ^|read -z err; end |read -z out
De casca de peixe / casca de peixe # 2463 ,
An issue in your fish example is that it redirects [stdout] of both [cmd] and [read], so if the latter prints anything, it'll be carried through the pipe.
Mas eu não acho que a leitura deva imprimir nada (especialmente no stdout) no caso normal, então isso deve estar bem.
Editar : Se a semântica exata de set var (cmd)
for necessária, isso pode ser obtido usando set var (printf '%s' $out)
e set var_err (printf '%s' $err)