it-swarm-tr.com

Bir komutun çıktısını komut satırı bağımsız değişkeni olarak diğerine nasıl iletirim?

Bu yüzden, iki adres verdiğimde iki HTML bağlantısı arayacak bir senaryom var:

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

Bunu wget adresine göndermek ve ardından çıktıyı temp.html. Bunu denedim ama işe yaramıyor. Birisi nedenini açıklayabilir ve/veya bana bir çözüm verebilir mi?

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

Bir komutu değerlendirmek ve komutun çıktısında aşağıdaki gibi değiştirmek için backticks (`) kullanabilirsiniz:

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

Senin durumunda:

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

"Xargs" kullanabilirsiniz. Önemsiz bir örnek:

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

Xargs'ın stdin'ini iki veya daha fazla komutanın çağrısına bölmemesine dikkat etmeniz gerekir (yukarıdaki örnekte "kedi").

20
Bruce Ediger

aslında url satırınızı yürütmüyorsunuz:

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

Burada cevapların bir kombinasyonunu kullanabilirsiniz. Alan karakterlerini url'deki kaçan ascii değerleri ile değiştirmek istediğinizi tahmin ediyorum. Bunu yapmak için, bunları yalnızca "%" ile değil "% 20" ile değiştirmeniz gerekir. İşte size tam bir cevap vermeniz gereken bir çözüm:

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

Geri tıklamalar önce ekteki komutun yorumlanması ve sonucun wget'e gönderilmesi gerektiğini belirtir. Dikkat yanlış yorumlanmasını önlemek için sed komutundaki boşluk ve% chars kaçtı. Wget için -q seçeneği, çıktıların komuttan ekrana yazdırılmasını engeller (çalışma durumunu önemsemediğinizde komut dosyası oluşturmak için kullanışlıdır) ve -O seçeneği çıktı dosyasını belirtir. FYI, çıktıyı bir dosyaya kaydetmek istemez, ancak sadece terminalde görüntülerseniz stdout'u belirtmek için dosya adı yerine "-" kullanın.

5
SethG

wget ayrıca - değiştirmek.

Çıkışı bir dosyaya kaydetmek istiyorsanız, -O değiştirmek.

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

xargs, bir komuttan çıktıyı diğer komutların argümanına yerleştirmek için en iyi seçenektir.

Komut1'in çıktısının 3 Olduğunu ve bir sonraki komutunuzun bu 3 Değişkenini bağımsız değişken olarak almasını istediğinizi varsayalım ki

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

Bunun için gidebilirsin

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

burada 4 ve 5, command2 için gerekli olabilecek diğer iki bağımsız değişkendir.

Bu süslü parantezleri, ilk komuttan çıktının alınmasını istediğiniz bağımsız değişken yerine koyabilirsiniz.

Yani, kullanın

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