web-dev-qa-db-ja.com

あるコマンドの出力をコマンドライン引数として別のコマンドに渡す方法は?

したがって、2つのアドレスを指定すると、2つの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

次のように、バッククォート( `)を使用してコマンドを評価し、コマンドの出力で置き換えることができます。

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がstdinを2つ以上のコマンドの呼び出し(上記の例では「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

ここで答えを組み合わせて使用​​できるようです。スペース文字をURL内のエスケープされたASCII値で置き換えたいと思います。これを行うには、単に「%」ではなく「%20」に置き換える必要があります。ここにあなたに完全な答えを与えるはずの解決策があります:

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

バッククォートは、囲まれたコマンドが最初に解釈され、結果がwgetに送信されることを示しています。 sedコマンドのスペースと%文字をエスケープして、誤って解釈されないようにしたことに注意してください。 wgetの-qオプションは、コマンドからの出力の処理が画面に表示されないようにし(作業中の状態を気にしない場合のスクリプト作成に役立ちます)、-Oオプションは出力ファイルを指定します。参考までに、出力をファイルに保存したくないが、ターミナルで表示するだけの場合は、ファイル名の代わりに「-」を使用してstdoutを示します。

5
SethG

wgetは、-スイッチを指定したstdinも受け入れます。

出力をファイルに保存する場合は、-Oスイッチを使用します。

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

xargsは、コマンドからの出力を他のコマンドの引数に配置するための最良のオプションです。

Command1の出力が3であり、次のコマンドがこれを3を引数として取りたいので、

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

そのためにあなたはのように行くことができます

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

ここで、4と5は、command2に必要になる可能性がある他の2つの引数です。

これらの中括弧は、最初のコマンドからの出力が必要な引数の場所に置くことができます。

だから、使用

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