使用Curl下载文件的Bash脚本

时间:2009-09-18 13:56:56

标签: bash curl download sed

我正在尝试将一个小批量脚本拼凑起来下载文件,它将URL作为其第一个参数,将本地文件名作为其第二个参数。在测试中我已经了解到它在输出文件名中跳过了空格,所以我尝试使用sed来逃避它们,但它没有用。

#!/bin/bash
clear
echo Downloading $1
echo
filename=`sed -e "s/ /\\\ /g" $2`
echo $filename
echo eval curl -# -C - -o $filename $1

但我收到了消息

  

sed:outfile.txt:没有这样的文件或目录

表示它尝试将输出文件作为输入加载到sed,而不是将输出文件名视为字符串文字。

这里的语法是什么?

4 个答案:

答案 0 :(得分:5)

正确引用参数,而不是转换它们可能是一种更好的方法

期望必须在shell脚本的参数中引用空格

是很正常的

e.g。

#!/bin/bash
clear
echo Downloading $1
echo `curl -# -C - -o "${2}" "${1}"`

这样称呼

./myscript http://www.foo.com "my file"

或者,当你调用它们时用'\'来转义空格

./myscript http://www.example.com my\ other\ filename\ with\ spaces

答案 1 :(得分:4)

我同意cms。正确引用输入参数是更好的风格 - 你将如何处理下一个问题角色? 以下情况要好得多。

curl -# -C - -o "$2" $1

但是,我讨厌没有回答问题的人,所以这里有一个答案: - )

#!/bin/bash
clear
echo Downloading $1
echo
filename=`echo $2 | sed -e "s/ /\\\ /g"`
echo $filename
echo eval curl -# -C - -o $filename $1

答案 2 :(得分:2)

curl -# -C - -o "$2" $1

答案 3 :(得分:0)

如果$2是文字输入,请尝试

echo $2 | sed 's: :\\\ :g '

我通常避免在sed分隔符中使用反斜杠,因为它们非常混乱。