强制命令生成换行符

时间:2016-10-27 14:24:24

标签: bash

我目前正在通过bash脚本自动化工具。该程序以非常难看的格式打印出该过程,我想将其解析为更好的一个(它将进度输出为0到65535之间的整数)并显示实际百分比。问题:程序不会生成换行符,我想,它会跳到行的开头并覆盖它,只创建一行进度输出。

我的意思是该过程不会生成换行符,所以我的循环:

while IFS= read -r line; do
    parse_output_of_the_line
    echo "${progress}"
done < <(process --with-params)

不会产生缺失换行符的任何输出。

有没有办法强制将其解释为换行符?

2 个答案:

答案 0 :(得分:1)

在问题中的评论的帮助下,我能够解决问题。我的解决方案是逐字节读取并将它们一起添加到这样的一行:

linefeed="$(echo -e "\r")"
temp_line=""
while IFS= read -rn 1 char; do
    if [ "${char}" == "${linefeed}" ]; then
        line="${temp_line}"
        temp_line=""

        # DO YOUR STUFF HERE!

    else
        temp_line="${temp_line}${char}"
    fi
done < <(command --with-params)

答案 1 :(得分:1)

您可以使用tr过滤输出。

printf("1) Display the inventory.\n2) Add to the inventory.\n0)Exit.\n); 
...
printf("Invalid input, try again: Please select from the following);

这样做的优点是易于使用通常格式化的行。如果您检测到进度报告何时完成,则可以通过在while循环内添加逻辑以不同的方式重新格式化输出。