【问题标题】:How to optionally show a progress bar, i.e. stop and show error output in a bash script?如何选择性地显示进度条,即在 bash 脚本中停止并显示错误输出?
【发布时间】:2018-06-18 09:45:06
【问题描述】:

我成功地使用了 python 工具tqdm 来显示一个漂亮的进度条,例如解压一个大文件。但是我不知道如何阻止它并显示 unzip 命令中的错误(如果有)。

#!/bin/bash
function progressBarFiles() {
    local total_files="$1"
    if hash tqdm 2>/dev/null; then
        tqdm --total $total_files --unit files --desc counting | wc -l >/dev/null
    else
        cat
    fi
}
unzip -o huge.zip | progressBarFiles 1697

目前由于文件权限更改失败,我在网络文件夹中解压缩失败:

counting:   1%|█▉                   | 22/1697 [00:00<00:28, 58.36files/s]
chmod (directory attributes) error: Permission denied
chmod (directory attributes) error: Permission denied
chmod (directory attributes) error: Permission denied
counting:   2%|██▎                  | 26/1697 [00:00<00:35, 46.64files/s]
chmod (directory attributes) error: Permission denied

我想在进度条之后停止脚本并一起打印此错误输出,而不是在解压缩时(这会破坏进度条)。

PS:cat 让进度条完全可选的想法是否可以改进?

【问题讨论】:

  • unzip的stderr重定向到一个临时文件,完成后cat到stderr。
  • 临时文件是唯一的解决方案吗?

标签: bash scripting


【解决方案1】:

如评论中所述通过重定向解决了此问题,但使用了一个干净的临时文件,该文件将被 100% 删除,有关更多详细信息,请参阅https://stackoverflow.com/a/51137057/1184842

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2020-02-06
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多