2017-12-02 23 views
0

기본 설정 파일을 읽고 기본 프린터의 값을 얻고 싶습니다. 그래서이 예제에서는 결과를 Zebra_GK420D으로 리턴 할 것을 기대합니다.bash는 소스를 사용하여 config.ini 파일의 기본 변수 값을 기반으로 변수를 읽습니다.

내 config.ini 파일은 다음과 같이

enable_printing=yes 
default_printer=printer1 
printer1=Zebra_GK420D 
printer2=DYMO_LabelWriter_4XL 
create_proof=yes 

나는 다음과 같은 bash는 스크립트를 사용 : 나는 스크립트를 실행하면

1 #!/usr/bin/env bash 
    2 
    3 #Define filename 
    4 fConfig=config.ini 
    5 
    6 #If file exists, read in variables. 
    7 if test -f $fConfig ; then 
    8   source $fConfig 
    9 fi 
10 
11 echo The default_printer is: ${default_printer%?} 
12 
13 echo The name of the default_printer is: $(${default_printer%?}) 

, 그것은 반환

The default_printer is: printer1 
./test.sh: line 13: printer1: command not found 

어떻게 bash 스크립트를 수정하여 다음을 리턴 할 수 있습니까?

config.ini 파일을 Windows에서 호스팅하기 때문에 보조 노트로
The default_printer is: printer1 
The name of the default_printer is: Zebra_GK420D 

16,각 라인 끝에 \r로 반환 드라이브, 그래서 각 행의 마지막 문자를 제거 %?을 사용하고 있습니다. 파일의 마지막 줄에는 끝에 \r이 없기 때문에 위험합니다. 마지막 문자를 맹목적으로 제거하는 대신 \r 만 제거하려면 %? 대신 무엇을 사용할 수 있습니까?

감사합니다.

+1

DOS 라인 끝을 사용하지 않도록 설정 파일을 수정하면 간접 매개 변수 확장을 사용할 수 있습니다 :'$ {! default_printer}'. (수정하지 않고'tmp = $ {default_printer %?}; echo $ {! tmp}'.) 두 줄만 입력하시면됩니다. – chepner

+1

제거 할 문자를 정확하게 지정할 수 있습니다 :'$ {default_printer % $ '\ r'} '. 그러나 나는 캐리지 리턴으로 소비자를 다루는 것보다는 파일을 수정하는 것을 강력히 권장한다. – chepner

+1

파일을 소싱하는 동안 캐리지 리턴을 걸러 내기 위해 프로세스 대체를 시도 할 수 있습니다.'source <(tr -d '\ r'<$ fConfig)' –

답변

0

대답은 오류 메시지입니다 : 명령을 찾을 수 없습니다. 당신의 라인 (13) 봐 :

echo The name of the default_printer is: $(${default_printer%?}) 

$(command)는 명령의 출력을 얻을 수 떠들썩한 파티에 사용됩니다. 따라서 프린터 이름을 명 령으로 실행하도록 명시 적으로 요청 했으므로 예상되는 명령은 존재하지 않습니다. 시도해보십시오 :

echo The name of the default_printer is: ${default_printer%?}