![쉘 스크립트는 grep 값을 사용하여 환경 변수를 설정할 수 없습니다.](https://linux55.com/image/62934/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94%20grep%20%EA%B0%92%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
쉘 스크립트에서 로그 파일의 값을 grep하여 환경 값으로 설정하고 싶습니다. 로그 파일에는 다음 줄이 있습니다.
SOME_PATH=/some/specific/path
내 쉘 스크립트에서 키워드를 찾아 SOME_PATH
위의 줄을 가져온 후 로 구분 =
하지만 이제 환경 변수를 설정할 수 있습니다.
line=`grep "SOME_PATH" /path/to/the/log.log`
path=${line##*=}
export SOME_PATH="$path" #I cannot change the environment variable with this line.
bash 파일에 아래와 같은 스크립트만 있는 경우 bash 파일을 얻으면 환경 변수가 변경됩니다.
export SOME_PATH=/some/specific/path
답변1
원칙적으로 솔루션은 작동해야 하지만 강력하지는 않습니다. 예를 들어, grep
ed 파일의 일치하는 줄에 다음과 같은 주석(또는 기타 항목)이 있는 경우:
SOME_PATH=/some/path # this is some path
그러면 해당 주석도 확장된 이름의 일부가 됩니다 path
. 경로에 실제로 무엇이 있는지 확인하려면(예: via printf "'%s'\n" "$path"
)
이런 방식으로 환경 변수를 설정하면 환경 변수가 설정된 셸 인스턴스와 하위 프로세스에만 영향을 미치고 주변 환경에는 영향을 주지 않습니다.