O mesmo acontece de forma mais simples:
function trythis
set -x foo bar
end
Se você executar agora trythis
e echo $foo
, também não será definido. Isso porque o -x
do fish por si só não altera o escopo da variável, que por padrão é local para a função, a menos que exista globalmente ou universalmente já.
Tente:
eval (echo 'set -gx FOO 1;')
Onde o g
é global. Isso faz com que a variável funcione como um valor normal de POSIX export
ed. É interessante que funcione da mesma forma com eval
, como seria com apenas set
; se você usar essa linha sans g
direto na linha de comando, $FOO
é definido, portanto, eval
e substituição de processo ()
não introduziram um novo escopo ou subshell e, quando executados dessa maneira dentro de uma função < em> o escopo da função se aplica.