,最簡單的解決方案涉及一個編輯XML文件:包含另一標記內的頻率/超時/命令標籤:
xmlstarlet sel -t -m /Config/x -v FREQUENCY -o : -v TIMEOUT -o : -v COMMAND -nl <<END
<Config>
<x>
<FREQUENCY>EVERYTIME</FREQUENCY>
<TIMEOUT>60</TIMEOUT>
<COMMAND>/opt/test1.sh</COMMAND>
</x>
<x>
<FREQUENCY>EVERYTIME</FREQUENCY>
<TIMEOUT>30</TIMEOUT>
<COMMAND>/opt/test2.sh</COMMAND>
</x>
</Config>
END
EVERYTIME:60:/opt/test1.sh
EVERYTIME:30:/opt/test2.sh
否則,假設你的xml文件是這樣簡單的(而我厭惡在xml上使用文本處理工具):
awk -F '[<>]' -v OFS=: '
$2 == "FREQUENCY" {f=$3}
$2 == "TIMEOUT" {t=$3}
$2 == "COMMAND" {c=$3}
f && t && c {print f,t,c; f=t=c=""}
' <<END
<Config>
<FREQUENCY>EVERYTIME</FREQUENCY>
<TIMEOUT>60</TIMEOUT>
<COMMAND>/opt/test1.sh</COMMAND>
<FREQUENCY>EVERYTIME</FREQUENCY>
<TIMEOUT>30</TIMEOUT>
<COMMAND>/opt/test2.sh</COMMAND>
</Config>
END
EVERYTIME:60:/opt/test1.sh
EVERYTIME:30:/opt/test2.sh
在這兩種情況下,你可以通過管道輸出到:
... | while IFS=: read freq timeout cmd; do
something with "$freq" "$timeout" "$cmd"
done
你就不能讓2線輸入的一個普通的文本文件的進程,用'while read line';做eval $行;完成<$ file'?祝你好運。 – shellter 2014-08-28 02:43:56