我目前有一个bash脚本,它检查一些依赖项,然后执行一些生成pdf的代码。
在检查依赖项时,我的输出如下所示:
CHECKING DEPENDENCIES:
4.3.33(1)-release.................................OK
wkhtmltopdf 0.12.1 (with patched qt)..............OK
jq-1.4............................................OK
依赖项名称和OK之间的句点数是硬编码的。因此,运行具有不同版本的脚本的任何人都将OK
错误地对齐,如下所示。
CHECKING DEPENDENCIES:
4.3.33(1)-release.................................OK
wkhtmltopdf 0.11.0..............OK
jq-1.4............................................OK
我认为创建一个单独的函数可能是最简单的,该函数传递了依赖项的名称,如果它没有问题。然后该功能打印出名称,点数和OK或NOK。
我磕磕绊绊的是如何执行该点数,以及是否有更简单的方法。
答案 0 :(得分:2)
您可以将此纯BASH实用程序用于格式化输出:
# max width of your terminal
maxlen=$(tput cols)
# initialize a string with $maxlen dots
printf -v fill "%${maxlen}s" ""
fill="${fill// /.}"
# function for printing it
printfmt() { printf '%s%0.'$(($maxlen - ${#1} - ${#2} ))'s%s\n' "$1" "$fill" "$2"; }
<强>测试强>
printfmt "wkhtmltopdf 0.11.0 foo bar baz" "OK"
wkhtmltopdf 0.11.0 foo bar baz................................................OK
printfmt "wkhtmltopdf 0.11.0 foo bar" "NOK"
wkhtmltopdf 0.11.0 foo bar...................................................NOK
printfmt "wkhtmltopdf 0.11.0" "OK"
wkhtmltopdf 0.11.0............................................................OK
答案 1 :(得分:1)
tput cols
(显示每行字符数)是您正在寻找的。使用它,您可以通过减去单词来轻松找出需要添加的点数。
答案 2 :(得分:1)
printf
在Bash中可用
为了更灵活地输出数字和字符串,printf命令允许使用格式修饰符。这些是在介绍性%和指定格式的字符之间指定的:
printf "%50s\n" "This field is 50 characters wide..."
答案 3 :(得分:1)
这种方式有点作弊,因为它会覆盖行,所以如果你在文件中捕获输出,它看起来不会很好看。但它适用于显示目的:
dotfmt=$(printf .%.0s {1..50})%s$(tput cr)%s\\n
#for each dependency:
# ...
printf dotfmt "$ok" "$name"
更清洁的解决方案是计算点数。
printf %s "$name"
if ((${#name} < 50)); then
printf .%.0s $(seq $((50-${#name})))
fi
echo "$ok"