피쉬 쉘에서 환경 변수를 설정하는 방법


91

누군가가 물고기 껍질에 환경 변수를 설정하는 올바른 방법이 무엇인지 말해 줄 수 있습니까?

내 .config / fish / config.fish 파일에는 환경 변수를 설정하는 기능이 있습니다.

function setTESTENV
      set -x BROKER_IP '10.14.16.216'
      set -x USERNAME 'foo'
      set -x USERPASS 'bar'
end 

명령 프롬프트에서 입력 하고 명령 줄에서 setTESTENVa env를 수행하면 이러한 정보가 표시되지 않습니다.

답변:


70

선언하는 변수는 함수 내의 로컬 범위에 유지됩니다.

사용하다:

set -g -x

여기 " g"는 글로벌 용입니다.


152

범용 변수 사용

현재 컴퓨터의 모든 현재 사용자 피시 인스턴스간에 변수를 공유 하고 셸 을 다시 시작할 때까지 유지 해야하는 경우 -U또는 --universal다음 을 사용해야합니다 .

set -Ux FOO bar

setwith를 사용 -g하거나 --global셸 인스턴스간에 지속적으로 변수를 설정하지 않습니다.


참고 :

config.fish파일의 범용 변수에 추가하지 마십시오. 이러한 변수는 각각의 새 쉘 인스턴스에서 더 길어질 것입니다. 대신 -Ux명령 줄에서 set을 한 번만 실행 하면됩니다. 그리고 그것은 파일에 저장됩니다 .config/fish/fishd.MACHINE_ID, MACHINE_ID일반적으로 MAC 주소입니다.


내 변수는에 저장되지 fishd.MACHINE_ID않았지만 대신에 저장되었습니다~/.config/fish/fish_variables
Seanny123

내 변수가 ~/.config/fish/fish_variables우분투 20.04에 저장되었습니다
Igor Markelov

11

다른 옵션은 다음을 실행하는 것입니다.

export (cat env_file.txt |xargs -L 1)

env_file.txt에는 형식의 행이 포함됩니다. VAR=VALUE

이것은 다른 쉘 및 도구에서 지원하는 형식으로 변수를 유지하는 이점이 있습니다.


댓글을 피하려면 다음을 수행하십시오. export (grep "^[^#]" .env |xargs -L 1)
Guillermo

10

물고기의 환경 변수

@JosEduSol의 답변이 올바르지 않고 OP 문제를 해결하는 데 도움이 -g되지만 범위를 전역으로 설정 -x하고 지정된 환경 변수를 하위 프로세스로 내보내는 것임을 추가하고 싶습니다 .

위의 실패 이유는 @cfpete가 함수 내부에 env 변수를 설정하고 기본 범위가 해당 함수에 국한되기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.