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


50

したがって、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

このようなものをデバッグするために、変数値をチェック(ターミナルにエコーすることにより)すると、多くの場合、すぐに解決策が得られます。
kasterma

回答:



19

「xargs」を使用できます。簡単な例:

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

xargsがその標準入力をコマンドの2回以上の呼び出し(上記の例では「cat」)に分割しないように注意する必要があります。


このコマンド名を思い出せなかったので、私はここに行きました。私のお気に入りのユースケースは、実際に次のとおりでした。xargs-I%some_command --input =%
e

14

あなたは実際にURL行を実行していません:

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

5

ここで答えの組み合わせを使用できるようです。私はあなたがスペース文字を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オプションは出力ファイルを指定します。参考までに、出力をファイルに保存せずに端末で表示する場合は、ファイル名の代わりに「-」を使用して標準出力を示します。


3

wgetは、-スイッチでstdinも受け入れます。

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

echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g' | wget -i- -O temp.html
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.