it-swarm-es.com

¿Cómo pasar la salida de un comando como argumento de línea de comando a otro?

Entonces tengo un script que, cuando le doy dos direcciones, buscará dos enlaces HTML:

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

Quiero enviar esto a wget y luego guardar la salida en un archivo llamado temp.html. Intenté esto, pero no funciona. ¿Alguien puede explicar por qué y/o darme una solución por favor?

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

Puede usar las teclas de retroceso (`) para evaluar un comando y sustituirlo en la salida del comando, como:

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

En tu caso:

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

Podrías usar "xargs". Un ejemplo trivial:

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

Debería tener cuidado de que xargs no divida su stdin en dos o más invocaciones del comandante ("gato" en el ejemplo anterior).

20
Bruce Ediger

en realidad no estás ejecutando tu línea de URL:

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

Parece que podría usar una combinación de las respuestas aquí. Supongo que desea reemplazar los caracteres espaciales con sus valores ascii escapados en la url. Para hacer esto, debe reemplazarlos con "% 20", no solo "%". Aquí hay una solución que debería darle una respuesta completa:

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

Los backticks indican que el comando adjunto debe interpretarse primero y el resultado debe enviarse a wget. Observe que escapé del espacio y% caracteres en el comando sed para evitar que se malinterpreten. La opción -q para wget evita el procesamiento de salida del comando que se imprime en la pantalla (útil para secuencias de comandos cuando no le importa el estado en el trabajo) y la opción -O especifica el archivo de salida. Para su información, si no desea guardar el resultado en un archivo, pero solo lo ve en el terminal, use "-" en lugar de un nombre de archivo para indicar stdout.

5
SethG

wget también acepta stdin con el - interruptor.

Si desea guardar la salida en un archivo, use -O interruptor.

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

xargs es la mejor opción para colocar la salida de un comando en el argumento de otro comando.

Suponga que la salida del comando1 es 3 y quieres que tu próximo comando tome esto 3 como argumento para que quieras algo como

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

Para eso puedes ir como

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

donde 4 y 5 son otros dos argumentos que pueden ser necesarios para command2.

Puede colocar esos corchetes en el lugar del argumento donde desea la salida del primer comando.

Entonces, usa

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