it-swarm-id.com

Bagaimana cara melewatkan output dari satu perintah sebagai argumen baris perintah ke perintah lainnya?

Jadi saya punya skrip yang, ketika saya berikan dua alamat, akan mencari dua tautan HTML:

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

Saya ingin mengirim ini ke wget dan kemudian menyimpan output dalam file bernama temp.html. Saya mencoba ini, tetapi tidak berhasil. Adakah yang bisa menjelaskan mengapa dan/atau memberi saya solusi?

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

Anda dapat menggunakan backticks (`) untuk mengevaluasi perintah dan mengganti dalam output perintah, seperti:

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

Dalam kasus Anda:

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

Anda bisa menggunakan "xargs". Contoh sepele:

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

Anda harus berhati-hati agar xargs tidak membagi stdin menjadi dua atau lebih pemanggilan komandan ("cat" pada contoh di atas).

20
Bruce Ediger

anda sebenarnya tidak mengeksekusi baris url Anda:

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

Tampaknya Anda dapat menggunakan kombinasi jawaban di sini. Saya kira Anda ingin mengganti karakter ruang dengan nilai ascii yang lolos di url. Untuk melakukan ini, Anda harus menggantinya dengan "% 20", bukan hanya "%". Inilah solusi yang seharusnya memberi Anda jawaban lengkap:

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

Backtick menunjukkan bahwa perintah terlampir harus ditafsirkan terlebih dahulu, dan hasilnya dikirim ke wget. Perhatikan bahwa saya lolos dari spasi dan% chars di perintah sed untuk mencegah mereka dari salah tafsir. Opsi -q untuk wget mencegah pemrosesan output dari perintah yang dicetak ke layar (berguna untuk skrip ketika Anda tidak peduli tentang status di-kerja) dan opsi -O menentukan file output. FYI, jika Anda tidak ingin menyimpan output ke file, tetapi hanya melihatnya di terminal, gunakan "-" bukan nama file untuk menunjukkan stdout.

5
SethG

wget juga menerima stdin dengan - beralih.

Jika Anda ingin menyimpan output dalam file, gunakan -O beralih.

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

xargs adalah opsi terbaik untuk menempatkan output dari perintah ke argumen dari commmand lainnya.

Misalkan output dari command1 adalah 3 dan Anda ingin perintah Anda berikutnya mengambil ini 3 sebagai argumen sehingga Anda menginginkan sesuatu seperti

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

Untuk itu Anda bisa seperti

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

di mana 4 dan 5 adalah dua argumen lain yang mungkin diperlukan untuk command2.

Anda bisa meletakkan kurung keriting itu di tempat argumen di mana Anda ingin output dari perintah pertama.

Jadi, gunakan

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