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.