Pythons의 ConfigParser 나 Perl의 Config :: INI와 같은 쉘 스크립트를 찾고 있습니다. 이 작업을 수행하기 위해 과거에 파일을 소싱했지만, "config 파일"을 실행하는 대신 읽기를 선호합니다. 누구든지 쉘 (또는 bash) 스크립트에서 사용할 수있는 위의 모듈과 비교할만한 것을 알고 있습니까?쉘 스크립트에서 설정 파일 읽기
감사합니다, 제리
Pythons의 ConfigParser 나 Perl의 Config :: INI와 같은 쉘 스크립트를 찾고 있습니다. 이 작업을 수행하기 위해 과거에 파일을 소싱했지만, "config 파일"을 실행하는 대신 읽기를 선호합니다. 누구든지 쉘 (또는 bash) 스크립트에서 사용할 수있는 위의 모듈과 비교할만한 것을 알고 있습니까?쉘 스크립트에서 설정 파일 읽기
감사합니다, 제리
당신은 소스 원하지 않는 그것, 당신이해야 있도록 :
이 설정을 1.read, 2.verify 라인
CONFIGFILE="/path/to/config"
echo "=$ADMIN= =$TODO= =$FILE=" #these variables are not defined here
eval $(sed '/:/!d;/^ *#/d;s/:/ /;' < "$CONFIGFILE" | while read -r key val
do
#verify here
#...
str="$key='$val'"
echo "$str"
done)
echo =$ADMIN= =$TODO= =$FILE= #here are defined
샘플을 3.eval 설정 파일
ADMIN: root
TODO: delete
var=badly_formtatted_line_without_colon
#comment
FILE: /path/to/file
위의 샘플을 실행하면 (테스트되지 않음) :
== == ==
=root= =delete= =/path/to/file=
이것이 최상의 해결책은 아닙니다. 어쩌면 누군가가 더 좋은 의견을 게시 할 수 있습니다.
ConfigParser처럼 미리 패키징 된 것을 생각하고 있었지만, 확실히 작동합니다. 감사! – zenzic
설정 파일에서 빈 줄을 처리하려면 : '$ {sed '/^* #/d; s/://;'< "$ CONFIGFILE" } "]; then str ="$ key = '$ val' " echo"$ str " fi done)' – slonik
@slonik 빈 줄을 처리하기위한 좋은 점. 스크립트에서'sed'는 불필요한 줄을 걸러 낸다. 그래서'/^* $/d'와 같은 다른 명령을 sed하기에 충분하다. 문제를 지적 해 주셔서 감사합니다. 내 대답을 편집했습니다. – jm666
#!/bin/bash
# Author: CJ
# Date..: 01/03/2013
## sample INI file save below to a file, replace "^I" with tab
#^I [ SECTION ONE ]
#TOKEN_TWO^I ="Value1 two "
#TOKEN_ONE=Value1 One
#TOKEN_THREE=^I"Value1^I three" # a comment string
#TOKEN_FOUR^I=^I"^IValue1 four"
#
#[SECTION_TWO]
#TOKEN_ONE=Value1 One ^I^I^I# another comment string
#TOKEN_TWO^I ="Value1 two "
#TOKEN_THREE=^I"Value1^I three"
#TOKEN_FOUR^I=^I"^IValue1 four"
## sample INI file
export INI= # allows access to the parsed INI values in toto by children
iniParse() {
# Make word separator Linefeed(\n)
OIFS="${IFS}"
IFS=$(echo)
SECTION=_
while read LINE; do {
IFS="${OIFS}"
# Skip blank lines
TMP="$(echo "${LINE}"|sed -e "s/^[ \t]*//")"
if [ 0 -ne ${#TMP} ]; then
# Ignore comment lines
if [ '#' == "${LINE:0:1}" -o '*' == "${LINE:0:1}" ]; then
continue
fi # if [ '#' == "${LINE:0:1}" -o '*' == "${LINE:0:1}" ]; then
# Section label
if [ "[" == "${LINE:0:1}" ]; then
LINE="${LINE/[/}"
LINE="${LINE/]/}"
LINE="${LINE/ /_}"
SECTION=$(echo "${LINE}")_
else
LINE="$(echo "${LINE}"|sed -e "s/^[ \t]*//")"
LINE="$(echo "${LINE}"|cut -d# -f1)"
TOKEN="$(echo "${LINE:0}"|cut -d= -f1)"
EQOFS=${#TOKEN}
TOKEN="$(echo "${TOKEN}"|sed -e "s/[ \t]*//g")"
VALUE="${LINE:${EQOFS}}"
VALUE="$(echo "${VALUE}"|sed -e "s/^[ \t=]*//")"
VALUE="$(echo "${VALUE}"|sed -e "s/[ \t]*$//")"
if [ "${VALUE:0:1}" == '"' ]; then
echo -n "${SECTION}${TOKEN}=${VALUE}"
echo -e "\r"
else
echo -n "${SECTION}${TOKEN}="\"${VALUE}\"""
echo -e "\r"
fi # if [ "${VALUE:0:1}" == '"' ]; then
fi # if [ "[" == "${LINE:0:1}" ]; then
fi # if [ 0 -ne ${#TMP} ]; then
IFS=$(echo)
} done <<< "$1"
IFS="${OIFS}" # restore original IFS value
} # iniParse()
# call this function with the INI filespec
iniReader() {
if [ -z "$1" ]; then return 1; fi
TMPINI="$(<$1)"
TMPINI="$(echo "${TMPINI}"|sed -e "s/\r//g")"
TMPINI="$(echo "${TMPINI}"|sed -e "s/[ \t]*\[[ \t]*/[/g")"
TMPINI="$(echo "${TMPINI}"|sed -e "s/[ \t]*\][ \t]*/]/g")"
INI=`iniParse "${TMPINI}"`
INI="$(echo "${INI}"|sed -e "s/\r/\n/g")"
eval "${INI}"
return 0
} # iniReader() {
# sample usage
if iniReader $1 ; then
echo INI read, exit_code $? # exit_code == 0
cat <<< "${INI}"
cat <<< "${SECTION_ONE_TOKEN_FOUR}"
cat <<< "${SECTION_ONE_TOKEN_THREE}"
cat <<< "${SECTION_TWO_TOKEN_TWO}"
cat <<< "${SECTION_TWO_TOKEN_ONE}"
else
echo usage: $0 filename.ini
fi # if iniReader $1 ; then
당신은 sudo apt-get install cfget
설치할 수 있습니다 cfget
를 살펴 할 수 있습니다.
시스템에 설치할 수있는 권한이 있으면 정말 유용한 도구입니다. –
다음과 같은 방법으로, INI 값을 해석하는 bash는 그것 - 스스로를 사용할 수 있습니다
$ source <(grep = file.ini)
샘플 파일 :
[section-a]
var1=value1
var2=value2
는 자세한 예 :
How do I grab an INI value within a shell script?
아니면 INI 떠들썩한 파티를 사용할 수 있습니다 -parser는 The Old School DevOps blog site에 있습니다.
가능한 복제본 [어떻게 쉘 스크립트 내에서 INI 값을 가져 옵니까?] (http://stackoverflow.com/questions/6318809/how-do-i-grab-an-ini-value-within-a -shell-script) – kenorb