2012-05-13 3 views
3
내가 디렉토리에 서로 다른 상태에 역할을하는 배쉬 프롬프트 프로젝트를 진행하고

당신은 현재입니다.로드 신뢰할 수없는 구성

은 내가 지금 필요한 것은 현재 디렉토리에서 미니 구성을로드 할 수있는 방법이다 이 방법은 매우 안전하지 않다는 점을 제외하고는 . .params.conf으로 쉽게 수행 할 수 있습니다. 사용자가있는 디렉토리에 대한 쓰기 권한이있는 사용자는 .params.conf 파일이있는 디렉토리를 비틀 때 명령을 작성하고 실행할 수 있습니다.

이와 같은 파일에서 변수를로드하는 가장 좋은 방법은 무엇입니까? 변수는 대부분 true/false 상태가 될 것이므로 어떤 식 으로든 파싱하지 않으므로 실행될 수 있습니다.

가능한 해결책 :

  • 루프는, 미리 정의 된 각 변수를로드하는 것은 가능하지만, 내가 읽을 수있는 방식으로 코드를 유지하려는.

  • bash 배열에 전체 파일을 넣는 것이 가장 좋은 해결책이 될 수 있지만 어떻게 이처럼 bash에서 키/값 dict을 채울 수 있습니까?

  • 배쉬는 변수를로드 파일을 소싱 할 수 있다면 ..

나는 params.conf 파일의 형식은 아직 모양을 잘 모릅니다. 하지만 가장 쉬운 방법은 공간으로 구분 된 각 매개 변수에 대해 하나의 행이 될 것이라고 생각합니다. 각 줄에있는이 중 하나와 마찬가지로 : key value that can have space in it. 당신의 가치는 따옴표를 포함하지 않는 경우

답변

3

evalvery insecure 일 수 있으며 여전히 악성 코드를 실행할 수 있습니다. declare을 사용하는 것이 더 좋습니다.

while read varname value 
do 
    declare "$varname=$value" 
done < .params.conf 
0

, 그것은 오히려 쉽게 : 변수의 내부 따옴표가있는 경우

while read varname value ; do 
    eval $varname="'$value'" 
done < .params.conf 

, 당신은 더 조심 일부 이스케이프를 추가해야합니다.

관련 문제