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腳本,以便它返回以下內容:
The default_printer is: printer1
The name of the default_printer is: Zebra_GK420D
請注意,由於config.ini文件託管在Windows驅動器上,因此每行最後會返回\r
,所以我使用%?
刪除每行的最後一個字符。這裏的危險在於文件中的最後一行最後沒有\r
。我可以使用什麼來代替%?
來只刪除\r
而不是盲目刪除最後一個字符?
謝謝。
如果你修改你的配置文件,以便它不使用DOS行尾,你可以使用間接參數擴展:'$ {!default_printer}'。 (沒有修復它,只需要兩行'tmp = $ {default_printer%?}; echo $ {!tmp}'。) – chepner
您可以指定要移除的確切字符:'$ {default_printer%$'\ r'} '。但是,我強烈建議只修復該文件,而不要讓消費者處理回車。 – chepner
你可以嘗試進程替換過濾掉源文件中的回車:'source <(tr -d'\ r'<$ fConfig)' –