我希望仅通过其进度条输出的前几个字符来获取cURL命令的下载进度。通常情况下,我会使用${string:position:length}
,但在这种情况下似乎不起作用。
以下是我正在使用的内容:
curl -O https://file.download.link/ > output.txt 2>&1
正如您所看到的,我将cURL命令的输出重定向到文件output.txt,但是我想说我只想存储前三个字符。使用我刚刚建议的内容会返回一个糟糕的替代品#39;错误:
echo ${curl -O https://file.download.link/:0:3} > output.txt 2>&1
所以我在这里超出了我的深度。
如果您想要更多上下文,我希望然后将命令更改为输出到命名管道,以便它可以更改CocoaDialog进度条的进度。我基本上给出了cURL下载进度条的GUI表示。
我会真的感谢您提供的任何帮助或建议,所以提前谢谢。
...如果这是一个“不好的”,我很抱歉。题。对于bash来说,我是一个相当新的人,并且通常会编写脚本。
答案 0 :(得分:1)
以下两种方法可以获取curl生成的每一行/更新的前三个字符。请注意,在curl打印其标题和第一个输出行之后,每个后续行/更新输出之前不是换行符,而是回车符\r
。在终端上,这为输出提供了很好的就地更新外观。在我们的例子中,我们必须添加一些特殊处理,如下所示,以正确解释\r
。
curl -O https://file.download.link/ 2>&1 | tr '\r' '\n' | grep -o '^...' >output.txt
curl -O https://file.download.link/ 2>&1 | awk -v RS='\r' '{print substr($0,1,3)}' >output.txt
$ curl -O http://www.google.com/index.html 2>&1 | awk -v RS='\r' '{print substr($0,1,3)}'
%
0
100