Bash cURL下载完成后,cURL将超过进度统计
我有一个简单的脚本:Bash cURL下载完成后,cURL将超过进度统计,bash,shell,unix,curl,Bash,Shell,Unix,Curl,我有一个简单的脚本: printf "* Download Status: Pending..." # Get HTML content from homepage homepage=$(curl -s "https://example.com/") wait printf "\r* Download Status: Successful\n" 下载完成后,\r模拟回车并打印下载状态:Successful,从而删除下载状态:Pending…。这是完美的 如果省略-s标志,curl将显示统计
printf "* Download Status: Pending..."
# Get HTML content from homepage
homepage=$(curl -s "https://example.com/")
wait
printf "\r* Download Status: Successful\n"
下载完成后,\r
模拟回车并打印下载状态:Successful
,从而删除下载状态:Pending…
。这是完美的
如果省略-s
标志,curl
将显示统计信息,直到下载完成
- 如何在下载过程中显示统计信息,并在
完成后将其删除curl
printf "< Download Status: Pending...\n\n"
# Get HTML content from homepage
homepage=$(curl "https://example.com/")
wait
printf "\r\r\r\r\r\r> Download Status: Successful\n"
我删除了所有行,否则将显示curl
stats的某些部分,使输出混乱。回车
\r
不会删除该行,而是将光标移动到当前行的开头。示例:
回波测试;printf'\r\u'
将打印\u est
要使用\r
删除当前行,必须使用
printf '\r '
请注意将(希望)覆盖当前行中所有内容的空格
光标移动
\r
始终保持在同一行。多个后续\r
s将具有与一个相同的效果。要删除其他行,必须使用其他行,例如
将光标向上移动\033[A
行
擦除到行尾(就像带有大量空格的\033[K
)\r
curl
以三行显示其进度。最上面是您的下载状态:挂起…”
消息。要将其全部删除
向左上四行\r\033[4A
删除第一行并转到第二行\033[K\n
删除第2行并转到第3行\033[K\n
删除第3行并转到第4行\033[K\n
删除第四行\033[K
向左走,再向上走四行\r\033[4A
打印新邮件下载状态:成功
echo "* Download Status: Pending..."
homepage=$(curl "https://example.com/")
wait
printf '\r\033[4A\033[K\n\033[K\n\033[K\n\033[K' # delete 4 lines
printf '\r\033[4A' # reposition cursor
echo '* Download Status: Successful'
您可以将最后三行写成一行printf
,但这将更难阅读
可供替代的
如果您不介意丢失所有输出(甚至是脚本之前执行的命令的输出),只需一个转义序列即可清除整个屏幕:\033c
echo "* Download Status: Pending..."
homepage=$(curl "https://example.com/")
wait
printf '\033c' # clear screen
echo '* Download Status: Successful'
回车
\r
不会删除该行,而是将光标移动到当前行的开头。示例:
回声测试;printf'\r\u'
将打印\u est
要使用\r
删除当前行,必须使用
printf '\r '
请注意将(希望)覆盖当前行中所有内容的空格
光标移动
\r
始终保持在同一行中。多个后续的\r
将具有与一行相同的效果。要删除其他行,必须使用其他行,例如
将光标向上移动\033[A
行
擦除到行尾(就像带有大量空格的\033[K
)\r
curl
以三行显示其进度。最上面是您的下载状态:挂起…”
消息。要将其全部删除
向左上四行\r\033[4A
删除第一行并转到第二行\033[K\n
删除第2行并转到第3行\033[K\n
删除第3行并转到第4行\033[K\n
删除第四行\033[K
向左走,再向上走四行\r\033[4A
打印新邮件下载状态:成功
echo "* Download Status: Pending..."
homepage=$(curl "https://example.com/")
wait
printf '\r\033[4A\033[K\n\033[K\n\033[K\n\033[K' # delete 4 lines
printf '\r\033[4A' # reposition cursor
echo '* Download Status: Successful'
您可以将最后三行写成一行printf
,但这将更难阅读
可供替代的
如果您不介意丢失所有输出(甚至是脚本之前执行的命令的输出),只需一个转义序列即可清除整个屏幕:\033c
echo "* Download Status: Pending..."
homepage=$(curl "https://example.com/")
wait
printf '\033c' # clear screen
echo '* Download Status: Successful'
一种解决方案是使用更复杂(ANSI)的转义序列。例如(运行前将其保存到脚本中): 这将打印三行,然后上移两行并覆盖文本。要理解
esc\u erase
,请尝试删除这一行
ANSI转义序列的世界是巨大的,令人望而生畏。上面的示例应该足以满足您当前的需要。当然,还有更多信息。一个解决方案是使用更复杂的(ANSI)转义序列。示例(运行前将其保存到脚本中): 这将打印三行,然后上移两行并覆盖文本。要理解
esc\u erase
,请尝试删除这一行
ANSI转义序列的世界是浩瀚的,令人望而生畏。上面的例子应该足以满足您的迫切需要。当然还有更多的信息。就像一个咒语@jmd_dk!我根据您的回答更新了我的问题。为ANSI代码使用变量的想法使脚本更加清晰。就像一个咒语@jmd_dk!我更新了d根据您的回答,我的问题。ANSI代码使用变量的想法使脚本更加清晰。感谢@Socowi的详细解释。我喜欢使用变量的想法,因为它们有助于维护概述。干杯!感谢@Socowi的详细解释。我喜欢使用变量的想法,因为它们有助于维护ove看,干杯!