bash printf - 如何在不删除先前输出的情况下将文本右对齐
bash printf - how to align text to right in the same line without deleting previous output
我正在尝试让脚本中的 Done
或 Fail
状态与先前文本的右侧对齐。但不是例如从最后一个字符起 50 个字符,但从终端左侧起 50 个字符。我不是使用单个打印它,而是使用多个 printf
。在我的代码中,例如
printf "Creating folder..."
sleep 2
mkdir foo
printf "\r%50.10s\n" "Done"
不幸的是它一直在输出
Done
而不是
Creating folder... Done
是否可以在不删除先前输出的情况下将同一行中的文本右对齐?
Debian 8,bash4.3.30
至少有几个选项。
简单地扩展已经输出的内容:
printf "Creating folder..."
mkdir foo
sleep 2
printf "%32s\n" "Done"
重写已经输出的内容:
printf "Creating folder..."
mkdir foo
sleep 2
printf "\r%-50s %s\n" "Creating folder..." "Done"
我将 sleep
移到了 mkdir
之后,让您有机会在 printf
再次启动之前阅读来自 mkdir
的错误消息。
您可能还想考虑在邮件中显示文件夹名称。
您可以使用 ANSI 转义码将光标明确定位在第 50 列中:
printf "Creating folder..."
sleep 2
mkdir foo
printf "3[50G%s\n" "Done"
^^^^^^^^
这不需要根据已打印的量计算宽度或重新打印行的第一部分。不过,它确实假设有一个处理 ANSI 转义码的终端。
我正在尝试让脚本中的 Done
或 Fail
状态与先前文本的右侧对齐。但不是例如从最后一个字符起 50 个字符,但从终端左侧起 50 个字符。我不是使用单个打印它,而是使用多个 printf
。在我的代码中,例如
printf "Creating folder..."
sleep 2
mkdir foo
printf "\r%50.10s\n" "Done"
不幸的是它一直在输出
Done
而不是
Creating folder... Done
是否可以在不删除先前输出的情况下将同一行中的文本右对齐?
Debian 8,bash4.3.30
至少有几个选项。
简单地扩展已经输出的内容:
printf "Creating folder..." mkdir foo sleep 2 printf "%32s\n" "Done"
重写已经输出的内容:
printf "Creating folder..." mkdir foo sleep 2 printf "\r%-50s %s\n" "Creating folder..." "Done"
我将 sleep
移到了 mkdir
之后,让您有机会在 printf
再次启动之前阅读来自 mkdir
的错误消息。
您可能还想考虑在邮件中显示文件夹名称。
您可以使用 ANSI 转义码将光标明确定位在第 50 列中:
printf "Creating folder..."
sleep 2
mkdir foo
printf "3[50G%s\n" "Done"
^^^^^^^^
这不需要根据已打印的量计算宽度或重新打印行的第一部分。不过,它确实假设有一个处理 ANSI 转义码的终端。