La solution la plus simple implique une modification dans le fichier xml: contenir la fréquence/temporisation/balises commande dans une autre balise:
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
Sinon, en supposant que votre fichier xml est ce simple (et je en utilisant des outils détestent de traitement de texte 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
Dans les deux cas, vous pouvez diriger la sortie vers:
... | while IFS=: read freq timeout cmd; do
something with "$freq" "$timeout" "$cmd"
done
tu ne peux pas faire 2 lignes d'entrée dans un fichier texte normal et le processus, il avec 'while read line; faire eval $ line; done <$ fichier'? Bonne chance. – shellter