Mam więc skrypt, który podając mu dwa adresy, przeszuka dwa linki HTML:
echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'
Chcę to wysłać, wget
a następnie zapisać dane wyjściowe w pliku o nazwie temp.html
. Próbowałem tego, ale to nie działa. Czy ktoś może wyjaśnić, dlaczego i / lub dać mi rozwiązanie?
#!/bin/bash
url = echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'
wget $url
bash
shell
command-line
LotoLo
źródło
źródło
Odpowiedzi:
Możesz użyć backticks (`) do oceny polecenia i podstawienia w danych wyjściowych polecenia, takich jak:
W Twoim przypadku:
źródło
$(...)
preferowane są backtyki .Możesz użyć „xargs”. Trywialny przykład:
Musisz uważać, aby xargs nie podzielił stdin na dwie lub więcej wywołań komendy („cat” w powyższym przykładzie).
źródło
tak naprawdę nie wykonujesz linii URL:
źródło
Wygląda na to, że możesz tutaj użyć kombinacji odpowiedzi. Zgaduję, że chcesz zastąpić znaki spacji ich wartościami ascii w adresie URL. Aby to zrobić, musisz zastąpić je „% 20”, a nie tylko „%”. Oto rozwiązanie, które powinno dać ci pełną odpowiedź:
Backticks wskazują, że załączone polecenie powinno być najpierw zinterpretowane, a wynik przesłany do wget. Zauważ, że uniknąłem spacji i% znaków w poleceniu sed, aby zapobiec ich błędnej interpretacji. Opcja -q dla wget zapobiega przetwarzaniu danych wyjściowych z polecenia drukowanego na ekranie (przydatne przy skryptach, gdy nie obchodzi cię status pracy), a opcja -O określa plik wyjściowy. Do Twojej wiadomości, jeśli nie chcesz zapisać wyniku w pliku, ale po prostu wyświetlić go w terminalu, użyj „-” zamiast nazwy pliku, aby wskazać standardowe wyjście.
źródło
wget akceptuje również standardowe wejście z
-
przełącznikiem.Jeśli chcesz zapisać dane wyjściowe w pliku, użyj
-O
przełącznika.źródło