Fish 함수 평가에서 -x 설정이 작동하지 않는 이유는 무엇입니까?

Fish 함수 평가에서 -x 설정이 작동하지 않는 이유는 무엇입니까?

프로그램의 출력을 기반으로 Fish 함수에서 일부 변수를 동적으로 설정하려고 시도하는 동안 문제가 발생했습니다.

문제의 범위를 MWE로 좁혔습니다.

function example
    eval (echo 'set -x FOO 1;')
end

부르다:

>example
>echo $FOO

결과가 출력되지 않습니다. 즉, FOO 환경 변수가 아직 설정되지 않았습니다. 어떻게 해야 합니까?

답변1

더 단순한 형태에서도 같은 일이 일어납니다.

function trythis
     set -x foo bar
end

trythis지금 실행하면 echo $foo설정되지 않습니다. 이는 Fish 자체가 변수의 범위를 변경하지 않기 때문입니다 -x. 변수는 이미 전역적이거나 어디에나 존재하지 않는 한 기본적으로 함수에 대해 로컬입니다.

노력하다:

  eval (echo 'set -gx FOO 1;') 

여기서 은 g글로벌 상황을 나타냅니다. 이렇게 하면 변수가 일반 POSIX export값처럼 작동하게 됩니다. 흥미롭게도 이는 eval일반과 동일한 방식으로 작동합니다. 명령줄에서 직접 sans 줄을 사용 set하면 설정되므로 프로세스 대체는 새로운 범위나 하위 쉘을 도입하지 않으며 함수 내부에서 이런 방식으로 실행될 때g$FOOeval()함수의 범위가 적용됩니다.

답변2

명령 의 범위를 지정해야 합니다 set. 이것이 없으면 기본 범위는 함수의 로컬 범위입니다. 보다환경 변수에 대한 Fish 매뉴얼 섹션변수 범위의 기본 규칙

노력하다 set -gx FOO.

관련 정보