wget ${RSS_URL} -O - 2>/dev/null | xmlstarlet sel -t -m "/rss/channel/item" -v "title" -n -v "link" -n -n
Ta linia wypisuje tytuł (-v "tytuł) iadres URL (-v "link") wpisów w kanale RSS, który mam. Chcę przechowywać tytuł i adres URL w osobnych zmiennych (na przykład $ title i $ url), aby móc później użyć ich do zwijania.
Jak mogę to zrobić?
Odpowiedzi:
1 dla odpowiedzi № 1Biegać xmlstarlet
dwa razy, raz dla każdej informacji, którą chcesz uzyskać.
Aby to było skuteczne, należy pobrać adres URL do pliku lokalnego (więc tylko raz wget
), a następnie uruchom xmlstarlet
w tym pliku:
title=$(xmlstarlet sel -t -m "/rss/channel/item" -v "title" local.xml)
link=$(xmlstarlet sel -t -m "/rss/channel/item" -v "link" local.xml)
Proponuję takie podejście, ponieważ będzie ono dobrze pasować do białych znaków w elementach, a nawet do nowych linii.
Uwaga: Aby zoptymalizować proces, możesz najpierw przefiltrować dane wejściowe XML, aby utworzyć nowy plik XML zawierający tylko żądane informacje, a następnie uruchomić xmlstarlet
ponownie, aby podzielić go na zmienne.
0 dla odpowiedzi nr 2
Możesz też użyć wbudowanej funkcji Bash „read”, aby przypisać wiele zmiennych jednocześnie:
$ read title link <(wget ${RSS_URL} -O - 2>/dev/null | xmlstarlet sel -t -m "/rss/channel/item" -v "title" -o " " -v "link")
$ echo $title
$ echo $link