所以我有一个脚本,当我给它两个地址时,它将搜索两个 HTML 链接:
echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'
Run Code Online (Sandbox Code Playgroud)
我想将它发送到wget然后将输出保存在一个名为temp.html. 我试过这个,但它不起作用。有人可以解释原因和/或给我一个解决方案吗?
#!/bin/bash
url = echo "http://maps.google.be/maps?saddr\=$1\&daddr\=$2" | sed 's/ /%/g'
wget $url
Run Code Online (Sandbox Code Playgroud)
Mic*_*zek 79
您可以使用反引号 (`) 来评估命令并替换命令的输出,例如:
echo "Number of files in this directory: `ls | wc -l`"
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
wget `echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g'`
Run Code Online (Sandbox Code Playgroud)
Bru*_*ger 33
你可以使用“xargs”。一个简单的例子:
ls -1 *.c | sort -n | xargs cat
Run Code Online (Sandbox Code Playgroud)
您必须注意 xargs 不会将其标准输入拆分为两个或多个命令调用(上例中的“cat”)。
One*_*One 17
你实际上并没有执行你的 url 行:
#!/bin/sh
url="$(echo http://maps.google.be/maps?saddr\=$1\&daddr\=$2 | sed 's/ /%/g')"
wget $url
Run Code Online (Sandbox Code Playgroud)
小智 5
似乎您可以在这里使用答案的组合。我猜你想用它们在 url 中转义的 ascii 值替换空格字符。为此,您需要将它们替换为“%20”,而不仅仅是“%”。这是一个应该给你一个完整答案的解决方案:
$ wget `echo http://maps.google.be/maps\?saddr\=$1\&daddr\=$2 | sed -e 's/\ /\%20/g'` -q -O temp.html
Run Code Online (Sandbox Code Playgroud)
反引号表示应该首先解释所包含的命令,然后将结果发送到 wget。请注意,我在 sed 命令中对空格和 % 字符进行了转义,以防止它们被误解。wget 的 -q 选项可防止处理打印到屏幕的命令的输出(当您不关心工作状态时编写脚本很方便),并且 -O 选项指定输出文件。仅供参考,如果您不想将输出保存到文件,而只想在终端中查看它,请使用“-”而不是文件名来指示标准输出。
小智 5
xargs是将一个命令的输出放入另一个命令的参数中的最佳选择。
假设 command1 的输出是,3并且您希望下一个命令将其3作为参数,您将需要这样的内容
command2 3(which is output of 1st command) 4 5
Run Code Online (Sandbox Code Playgroud)
所以,为此你可以这样做
command1 | xargs -I{} command2 {} 4 5
Run Code Online (Sandbox Code Playgroud)
其中 4 和 5 是 可能需要的另外两个参数command2。
您可以将大括号放在您想要第一个命令输出的位置。
所以,使用
command1 | xargs -I{} command2 {}
Run Code Online (Sandbox Code Playgroud)