したがって、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
次のように、バッククォート( `)を使用してコマンドを評価し、コマンドの出力で置き換えることができます。
echo "Number of files in this directory: `ls | wc -l`"
あなたの場合:
wget `echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g'`
「xargs」を使用できます。簡単な例:
ls -1 *.c | sort -n | xargs cat
Xargsがstdinを2つ以上のコマンドの呼び出し(上記の例では「cat」)に分割しないように注意する必要があります。
あなたは実際にあなたのURL行を実行していません:
#!/bin/sh
url="$(echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g')"
wget $url
ここで答えを組み合わせて使用できるようです。スペース文字を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を示します。
wgetは、-
スイッチを指定したstdinも受け入れます。
出力をファイルに保存する場合は、-O
スイッチを使用します。
echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g' | wget -i- -O temp.html
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 {}