
이름이 지정된 폴더가 있고 여기에는 , 등과 같은 MyProperties
여러 파일이 포함되어 있습니다 . 각 파일에는 다음과 같은 내용이 포함되어 있습니다..properties
1.properties
2.properties
3.properties
keyname=value
할당되거나 대체되도록 속성 파일의 값으로 여기에 무엇을 써야 합니까? Bash 스크립트에서 이를 반복하고 키에 값을 할당하려면 어떻게 해야 합니까?
의사 코드:
#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname
답변1
sed
파일의 값을 바꾸는 데 사용할 수 있습니다 .
#!/bin/bash
new_value=5
for f_name in MyProperties/*.properties; do
sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done
답변2
실제로 쌍이 포함된 파일이 여러 개 있는 경우 varName=value
해야 할 일은 다음과 같습니다.원천그것. 따라서 모든 파일을 반복 .properties
하고 각각의 파일을 소싱합니다.
for file in /path/to/MyProperties/*.properties; do
. "$file"
done
이제 스크립트에 모든 변수가 정의되었습니다. 설명하자면:
$ cat foo.properties
foo="bar"
$ echo "$foo" ## no value
$ . ./foo.properties
$ echo "$foo"
bar
이는 귀하의 .properties
파일이변수=값 쌍만 있음. 소싱할 때 파일의 각 줄은 소싱을 수행하는 스크립트를 실행하는 셸에서 실행됩니다. 따라서 .properties
파일의 모든 명령도 실행됩니다. 그리고 액세스 권한이 있는 공격자는 MyProperties
여기에 악의적인 명령을 추가할 수 있습니다. 따라서 파일 내용을 확신할 수 있는 경우에만 이 작업을 수행하십시오.
내장 에 제공된 경로에 문자(따라서 위의 내용 )가 .
포함되어 있다는 것이 중요합니다 . 그렇지 않으면 현재 디렉터리 대신 파일이 디렉터리에서 검색됩니다 (POSIX 준수 모드의 경우 와 그렇지 않은 경우 다음을 찾습니다). 에서 찾을 수 없는 경우 현재 작업 디렉토리에 있음 )./
./foo.properties
$PATH
bash
. file
file
$PATH