it-swarm-eu.dev

Jak předat výstup jednoho příkazu jako argument příkazového řádku jinému?

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
59
Matt D

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'`
56
Michael Mrozek

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).

20
Bruce Ediger

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
15
OneOfOne

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 "-".

5
SethG

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
3
wag

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 {} 
0
Ria Sharma