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


50

所以我有一个脚本,当我给它两个地址时,它将搜索两个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 2010年

Answers:



19

您可以使用“ xargs”。一个简单的例子:

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

您必须注意xargs不会将其stdin分成两个或多个对comman的调用(在上面的示例中为“ cat”)。


我到这里结束了,因为我不记得这个命令名了。我最喜欢的用例确实是:xargs -I%some_command --input =%-e -t -c(我在这里把它作为其他遵循相同跟踪记录的注释)
mpasko256

14

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

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

5

看来您可以在这里结合使用答案。我猜想您想用网址中转义的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选项指定输出文件。仅供参考,如果您不想将输出保存到文件中,而只是在终端中查看,请使用“-”代替文件名来指示标准输出。


3

wget也接受带有-开关的stdin 。

如果要将输出保存在文件中,请使用-O开关。

echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g' | wget -i- -O temp.html
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.