2017-12-02 281 views
0

我想讀取我的配置文件並獲取默認打印機的值。所以在這個例子中,我期望返回結果Zebra_GK420Dbash根據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腳本,以便它返回以下內容:

The default_printer is: printer1 
The name of the default_printer is: Zebra_GK420D 

請注意,由於config.ini文件託管在Windows驅動器上,因此每行最後會返回\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

答案出現在錯誤消息中:command not found。看看你的第13行:

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

$(command)在bash中用來獲取命令的輸出。所以你明確地要求將打印機名稱作爲命令執行,並且可以預見,該命令不存在。試試:

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