it-swarm.cn

如何将一个命令的输出作为命令行参数传递给另一个命令?

所以我有一个脚本,当我给它两个地址时,它将搜索两个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分成两个或多个对comman的调用(在上面的示例中为“ cat”)。

20
Bruce Ediger

您实际上并没有执行您的网址行:

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

看来您可以在这里结合使用答案。我猜想您想用网址中的转义ascii值替换空格字符。为此,您需要将它们替换为“%20”,而不仅仅是“%”。这是一个应该为您提供完整答案的解决方案:

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

反引号表示应首先解释包含的命令,并将结果发送到wget。注意,我在sed命令中转义了空格和%chars,以防止它们被误解。 wget的-q选项可防止将命令的输出处理输出到屏幕上(当您不在乎工作状态时,方便进行脚本编写),并且-O选项指定输出文件。仅供参考,如果您不想将输出保存到文件中,而只是在终端中查看,请使用“-”代替文件名来指示标准输出。

5
SethG

wget还接受带有-开关。

如果要将输出保存到文件中,请使用-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可能需要的另外两个参数。

您可以将这些花括号放在需要第一个命令输出的参数位置。

所以用

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