Fish Shell: 내보내기를 사용하여 파일에서 여러 환경 변수를 설정하는 방법

Fish Shell: 내보내기를 사용하여 파일에서 여러 환경 변수를 설정하는 방법

Fish Shell에서 내보내기를 통해 환경 변수를 설정할 수 있습니까? 저는 이런 방식으로 변수가 구성된 프로젝트를 진행하고 있는데, 피쉬에 대해 별도의 구성 파일을 유지하는 것은 의미가 없습니다.

Bash에서 다음 예를 고려하십시오.

echo -e "foo=1\nfoobar=2\n" > foo; export $(cat foo | xargs); env | grep foo

   foo=1
   foobar=2

피쉬 셸에서는 변수를 설정하는 것처럼 보이며 파일에 변수가 있는 경우에만 가능합니다.

~ $ echo -e "foo=3\nfoobar=4" > foo; export (cat foo | xargs); env | grep foo

~ $ echo -e "foo=3" > foo; export (cat foo | xargs); env | grep foo

   foo=3

이것은 Fish의 수출 구현에 있어서 단지 결함/누락인가요?

이 질문은 비슷하지만 다른 두 게시물과 다릅니다.

답변1

귀하의 예는 거의 완벽하게 작동합니다. export문제는 아니지만 사용법 입니다 xargs.

노력하다:

echo -e "foo=3\nfoobar=4" > .env; export (cat .env);  env | grep foo

그 이유는 명령이 구분된 개행 문자의 인수를 대체하고 xargs제거하기 때문입니다.

> count (cat .env | xargs)
1
> count (cat .env)
2

답변2

Fish에서는 다음과 같은 오류가 발생할 것으로 예상됩니다 export.

$ echo -e "foo=1\nfoobar=2\n" > foo; export (cat foo | xargs);  env | grep foo
bash: --: command not found...
fish: echo -e "foo=1\nfoobar=2\n" > foo; export (cat foo | xargs);  env | grep foo
                                         ^

해당 줄이 포함된 파일이 있고 variable=value이를 사용하여 환경 변수를 설정하려는 경우:

$ cat foo
foo=1
foobar=2

$ source (sed -rn 's/^([^=]+)=(.*)/set -x \1 \2/p' foo | psub)
$ set -x | grep foo
foo 1
foobar 2

관련 정보