it-swarm.it

Come passare l'output di un comando come argomento della riga di comando a un altro?

Quindi ho uno script che, quando gli do due indirizzi, cercherà due collegamenti HTML:

echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'

Voglio inviarlo a wget e quindi salvare l'output in un file chiamato temp.html. Ho provato questo, ma non funziona. Qualcuno può spiegare perché e/o darmi una soluzione per favore?

#!/bin/bash
url = echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" |  sed 's/ /%/g'
wget $url
59
Matt D

Puoi usare i backtick (`) per valutare un comando e sostituirlo nell'output del comando, come:

echo "Number of files in this directory: `ls | wc -l`"

Nel tuo caso:

wget `echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g'`
56
Michael Mrozek

È possibile utilizzare "xargs". Un esempio banale:

ls -1 *.c | sort -n | xargs cat

Dovresti fare attenzione che xargs non divida il suo stdin in due o più invocazioni del comman ("cat" nell'esempio sopra).

20
Bruce Ediger

non stai effettivamente eseguendo la tua linea URL:

#!/bin/sh
url="$(echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g')"
wget $url
15
OneOfOne

Sembra che tu possa usare una combinazione di risposte qui. Immagino che tu voglia sostituire i caratteri spaziali con i loro valori ASCII sfuggiti nell'URL. Per fare ciò, è necessario sostituirli con "% 20", non solo "%". Ecco una soluzione che dovrebbe darti una risposta completa:

$ wget `echo http://maps.google.be/maps\?saddr\=$1\&daddr\=$2 | sed -e 's/\ /\%20/g'` -q -O temp.html

I backtick indicano che il comando incluso deve essere interpretato per primo e il risultato inviato a wget. Notate che sono sfuggito allo spazio e% char nel comando sed per impedire che vengano interpretati male. L'opzione -q per wget impedisce l'elaborazione dell'output dal comando che viene stampato sullo schermo (utile per gli script quando non ti interessa lo stato in-work) e l'opzione -O specifica il file di output. Cordiali saluti, se non si desidera salvare l'output in un file, ma solo visualizzarlo nel terminale, utilizzare "-" invece di un nome file per indicare stdout.

5
SethG

wget accetta anche stdin con il - interruttore.

Se vuoi salvare l'output in un file, usa -O interruttore.

echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g' | wget -i- -O temp.html
3
wag

xargs è l'opzione migliore per posizionare l'output di un comando nell'argomento di altri comandi.

Supponiamo che l'output di command1 sia 3 e vuoi che il tuo prossimo comando prenda questo 3 come argomento, quindi vuoi qualcosa di simile

command2 3(which is output of 1st command) 4 5

Per quello puoi andare come

command1 | xrgs -I{} command2 {} 4 5

dove 4 e 5 sono altri due argomenti che potrebbero essere necessari per command2.

È possibile inserire quelle parentesi graffe nella posizione dell'argomento in cui si desidera l'output dal primo comando.

Quindi usa

command1 | xrgs -I{} command2 {} 
0
Ria Sharma