bash 쉘에서 속성(env) 파일의 속성 값을 bash 쉘의 var로 로드하는 방법은 무엇입니까?

bash 쉘에서 속성(env) 파일의 속성 값을 bash 쉘의 var로 로드하는 방법은 무엇입니까?

나는 가지고있다

SA_PASSWORD=Password1!

파일에서 테스트/.makefile_test_env. 내 bash 쉘의 변수에 "Password1!" 값을 가져오고 싶습니다. 나는 이것을 시도했다

$ MY_VAR=$(grep SA_PASSWORD tests/.makefile_test_env | xargs)

불행히도 이것은 반환됩니다

$ echo $MY_VAR
SA_PASSWORD=Password1!

"SA_PASSWORD=" 부분을 필터링하는 방법은 무엇입니까?

답변1

명령을 통해 이를 수행할 수 있지만 cut스크립트에 비밀번호를 남겨 두는 것은 아마도 좋은 생각이 아니라는 점을 명심하십시오.

[ekaj@headdesk ~]$ cat vars
SA_PASSWORD=Password1!
[ekaj@headdesk ~]$ cat setvar.sh
#!/bin/bash
echo "MY_VAR is currently set to: $MY_VAR"
MY_VAR=$(grep SA_PASSWORD ./vars | cut -d'=' -f 2-)
echo "MY_VAR is currently set to: $MY_VAR"
[ekaj@headdesk ~]$
[ekaj@headdesk ~]$ ./setvar.sh
MY_VAR is currently set to:
MY_VAR is currently set to: Password1!
[ekaj@headdesk ~]$

-f 2-첫 번째 필드 이후의 모든 필드를 인쇄합니다 =. 이는 비밀번호에 등호가 있는 경우 유용할 수 있습니다.

답변2

거의 다 완성했습니다. 확장 정규식과 뒤돌아보기 모드를 사용해 보세요(그리고 파이프도 필요하지 않습니다 xargs).

MY_VAR=$(grep -Po '(?<=SA_PASSWORD=).*' tests/.makefile_test_env)

이것은 말한다:

  1. "MY_VAR"이라는 쉘 변수를 생성하고 $()에 있는 내용으로 설정합니다. 즉...
  2. grep은 -Pperl 정규식을 사용하고 -o'...' 패턴과 일치하는 항목만 반환합니다. 즉,
  3. (?<=SA_PASSWORD=).*이는 문자를 여러 번 일치시키는 것을 의미합니다. 단, 첫 번째 문자 앞의 문자가 .*"SA_PASSWORD="이고 일치 항목에 포함되지 않는 경우에만 해당됩니다.(?<=).

답변3

변수 이름이 중요하지 않다면 괜찮습니다 source.

source tests/.makefile_test_env
echo $SA_PASSWORD # Prints Password1!

경고하다: 신뢰할 수 없는 파일에 대해 소스 작업을 수행하는 것은 위험합니다. 당신은 쉘 스크립트를 실행하고 있으며 스크립트는 당신이 스스로 할 수 있는 모든 것을 할 수 있습니다.

관련 정보