尝试将输出重定向到cURL命令的屏幕上?如果cURL无法在网站上找到该文件,那么异常会发生什么?它使用FTP URL下载到FTP站点。我有很多文件,所以它循环迭代,我不希望它停止,如果找不到文件,所以如果找不到异常将继续?如果我严格使用bash脚本,我可以使用cURL命令吗?它确实下载了文件,但它输出了很多东西,并且还能够测试它会引发错误的情况,所以不确定它是否会继续。
如何阻止cURL输出到屏幕?这是我到目前为止所做的。
echo $DLADDR
curl -o Downloads/$FILECATNAME $DLADDR 2>&1 | tee $LOGFILE
我想停止此输出并将每个输出放入LOG文件中。
示例cURL输出:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 574k 100 574k 0 0 622k 0 --:--:-- --:--:-- --:--:-- 632k
答案 0 :(得分:0)
正如上面的评论中提到的,很难准确地确定你在问什么。但是,其中一个问题是:
如何阻止CURL输出到屏幕?
你在说:
curl -o Downloads/$FILECATNAME $DLADDR 2>&1 | tee $LOGFILE
会将响应输出重定向到指定文件,但STDERR
的{{1}}将与curl
和STDOUT
d合并到日志文件中。
立即将输出重定向到停止CURL从输出到屏幕,即说:
tee
另一个问题似乎是:
我不希望它停止,如果找不到文件,所以如果继续,将继续 没有找到例外?
如果curl -o Downloads/$FILECATNAME $DLADDR > $LOGFILE 2>&1
遇到错误,脚本不应该停止,除非您已指定这样做,即除非您说过:
curl
在你的剧本中。
答案 1 :(得分:0)
您可能需要调查curl的-w
(--write-out
)选项,以准确获取所需的日志信息,并避免使用不必要/未报告的位。
#!/usr/bin/env bash
DLADDR=ftp://example.com/somefile
LOGFILE=/path/to/downloader.log
declare -a bashopts=()
bashopts+=(-s)
bashopts+=("-o 'Downloads/$FILECATNAME'")
bashopts+=("-w '%{size_download} %{speed_download} %{time_total} %{filename_effective}'")
curl "${bashopts[@]}" "$DLADDR" > "$LOGFILE"
我们通过将选项管理放入数组来简化选项管理。请注意选项:
-s
使进度表无声。-o
根据您的示例设置输出文件。-w
根据curl手册页中列出的格式写入输出。由于您使用-o
指导输出文件,因此curl发送到 stdout 的唯一信息将是-w
命令生成的日志数据。 / p>
请注意,在bash中引用变量的经验法则是,如果你使用变量......应该引用它。
答案 2 :(得分:-2)
curl -o Downloads/$DESCFILE $TEXT1 > $TEXT 2>&1