Mám tedy skript, který, když mu dám dvě adresy, prohledá dva odkazy HTML:
echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'
Chci to poslat na wget
a poté uložit výstup do souboru s názvem temp.html
. Zkusil jsem to, ale nefunguje to. Může mi někdo vysvětlit proč a/nebo mi dát řešení?
#!/bin/bash
url = echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'
wget $url
Pomocí backticks (`) můžete vyhodnotit příkaz a nahradit jeho výstup, například:
echo "Number of files in this directory: `ls | wc -l`"
Ve vašem případě:
wget `echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g'`
Dalo by se použít "xargs". Triviální příklad:
ls -1 *.c | sort -n | xargs cat
Museli byste se postarat o to, aby xargs nerozdělil svůj stdin na dvě nebo více vyvolání Comman ("kočka" ve výše uvedeném příkladu).
ve skutečnosti nevykonáváte linku url:
#!/bin/sh
url="$(echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g')"
wget $url
Zdá se, že zde můžete použít kombinaci odpovědí. Hádám, že chcete v prostoru URL nahradit vesmírné znaky jejich uniklými hodnotami ASCII. Chcete-li to provést, musíte je nahradit „% 20“, nejen „%“. Zde je řešení, které by vám mělo poskytnout úplnou odpověď:
$ wget `echo http://maps.google.be/maps\?saddr\=$1\&daddr\=$2 | sed -e 's/\ /\%20/g'` -q -O temp.html
Backticks znamenají, že uzavřený příkaz by měl být nejprve interpretován a výsledek poslán wgetu. Všimněte si, že jsem unikl z mezery a% znaků v příkazu sed, abych zabránil jejich nesprávnému výkladu. Volba -q pro wget zabraňuje zpracování výstupu z příkazu vytištěného na obrazovku (užitečné pro skriptování, pokud vám nezáleží na stavu v práci) a volba -O určuje výstupní soubor. FYI, pokud si nepřejete uložit výstup do souboru, ale pouze si jej prohlédnout v terminálu, použijte k označení stdout místo názvu souboru "-".
wget také přijímá stdin s -
přepínač.
Pokud chcete uložit výstup do souboru, použijte -O
přepínač.
echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g' | wget -i- -O temp.html
xargs
je nejlepší možnost umístit výstup z příkazu do argumentu jiného příkazu.
Předpokládejme, že výstup příkazu1 je 3
a chcete, aby tento příkaz převzal tento 3
jako argument, takže chcete něco podobného
command2 3(which is output of 1st command) 4 5
Za to můžete jít jako
command1 | xrgs -I{} command2 {} 4 5
kde 4 a 5 jsou další dva argumenty, které mohou být potřebné pro command2
.
Tyto složené závorky můžete umístit na místo argumentu, kam chcete výstup z prvního příkazu.
Takže, použijte
command1 | xrgs -I{} command2 {}