我目前正在通过bash脚本自动化工具。该程序以非常难看的格式打印出该过程,我想将其解析为更好的一个(它将进度输出为0到65535之间的整数)并显示实际百分比。问题:程序不会生成换行符,我想,它会跳到行的开头并覆盖它,只创建一行进度输出。
我的意思是该过程不会生成换行符,所以我的循环:
while IFS= read -r line; do
parse_output_of_the_line
echo "${progress}"
done < <(process --with-params)
不会产生缺失换行符的任何输出。
有没有办法强制将其解释为换行符?
答案 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循环内添加逻辑以不同的方式重新格式化输出。