Bir komutun çıktısını komut satırı argümanı olarak diğerine nasıl geçirebilirim?


50

Dolayısıyla iki adres verdiğimde iki HTML bağlantısı arayacak bir betik var:

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

Bunu göndermek wgetve daha sonra çıktıyı bir dosyaya kaydetmek istiyorum temp.html. Bunu denedim ama işe yaramadı. 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

Bunun gibi bir hata ayıklama için değişken değerlerinizi (bunları terminale ekleyerek) kontrol etmek çoğu zaman hızlı bir şekilde çözüme ulaşmanızı sağlar.
kasterma

Yanıtlar:



19

"Xargs" kullanabilirsiniz. Önemsiz bir örnek:

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

Xargs'ın stdin'i komuta iki veya daha fazla çağrıya bölmemesine dikkat etmeniz gerekir (yukarıdaki örnekte "cat").


Bu komutun adını hatırlayamadığım için buraya geldim. Favori kullanım durumum gerçekten: xargs -I% some_command --input =% -e -t -c (buraya, aynı izlemeyi takip eden başkaları için bir not olarak koydum)
mpasko256

14

aslında url satırınızı çalıştırmıyorsunuz:

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

5

Buradaki cevapların bir kombinasyonunu kullanabilirsin. Boşluk karakterlerini, url'deki kaçış ascii değerleriyle değiştirmek istediğinizi tahmin ediyorum. Bunu yapmak için, onları yalnızca "%" yerine "% 20" ile değiştirmeniz gerekir. İşte size tam bir cevap vermesi gereken bir çözüm:

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

Backticks, ekteki komutun önce yorumlanması gerektiğini ve sonucun wget olarak gönderildiğini gösterir. Dikkat Yanlış yorumlanmalarını önlemek için sed komutundaki boşluk ve% karakterlerinden kaçtım. -Q wget seçeneği, işlem çıktısının komutun ekrana yazdırılmasını önler (çalışma durumu umursamıyorsanız komut dosyası için kullanışlıdır) ve -O seçeneği çıktı dosyasını belirtir. FYI, çıktıyı bir dosyaya kaydetmek istemiyorsanız, ancak terminalde görüntülemek istiyorsanız, stdout'u belirtmek için dosya adı yerine "-" kullanın.


3

Wget da -anahtarı ile stdin kabul eder .

Çıktıyı bir dosyaya kaydetmek istiyorsanız, -Oanahtarı kullanın .

echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g' | wget -i- -O temp.html
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.