it-swarm-ru.tech

Как передать вывод одной команды в качестве аргумента командной строки другой?

Итак, у меня есть скрипт, который, когда я дам ему два адреса, будет искать две HTML-ссылки:

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

Я хочу отправить это в wget, а затем сохранить вывод в файл с именем temp.html. Я пробовал это, но это не работает. Может кто-нибудь объяснить, почему и/или дать мне решение, пожалуйста?

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

Вы можете использовать backticks (`) для оценки команды и замены в выводе команды, например:

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

В твоем случае:

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

Вы можете использовать "xargs". Тривиальный пример:

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

Вы должны позаботиться о том, чтобы xargs не разделял свой стандартный ввод на два или более вызовов comman ("cat" в приведенном выше примере).

20
Bruce Ediger

вы на самом деле не выполняете свою строку URL:

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

Кажется, вы могли бы использовать комбинацию ответов здесь. Я предполагаю, что вы хотите заменить пробелы на их экранированные значения ascii в URL. Для этого вам нужно заменить их на "% 20", а не только на "%". Вот решение, которое должно дать вам полный ответ:

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

Обратные пометки указывают, что вложенная команда должна быть сначала интерпретирована, а результат отправлен в wget. Обратите внимание, что я избежал пробела и% chars в команде sed, чтобы предотвратить их неправильное толкование. Параметр -q для wget предотвращает обработку выходных данных команды, выводимой на экран (удобно для сценариев, когда вас не интересует рабочее состояние), а параметр -O указывает выходной файл. К вашему сведению, если вы не хотите сохранять вывод в файл, а просто просматриваете его в терминале, используйте "-" вместо имени файла, чтобы указать стандартный вывод.

5
SethG

wget также принимает стандартный ввод с помощью - переключатель.

Если вы хотите сохранить вывод в файл, используйте -O переключатель.

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

xargs - лучший вариант для помещения вывода команды в аргумент другой команды.

Предположим, что вывод команды1 равен 3 и ​​вы хотите, чтобы ваша следующая команда приняла это 3 в качестве аргумента, чтобы вы хотели что-то вроде

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

Для этого вы можете пойти как

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

где 4 и 5 - два других аргумента, которые могут понадобиться для command2.

Вы можете поместить эти фигурные скобки в место аргумента, где вы хотите вывод первой команды.

Итак, используйте

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