我正在尝试创建一个bash脚本,该脚本将显示多个服务的状态。 我创建的用于显示状态的功能如下:
printStatus() {
if checkProcess "${1}"; then
echo -e "${1} status: \t\t [RUNNING]"
else
echo -e "${1} status: \t\t [DOWN]"
fi
}
问题是$1
具有可变大小,例如,它会产生以下结果:
Mysql status: [RUNNING]
PHP-fpm status: [RUNNING]
如何设法让[RUNNING]
标签完美地在彼此之下?
所以我希望如下:
Mysql status: [RUNNING]
PHP-fpm status: [RUNNING]
这是我在Mat's answer之后的功能:
printStatus() {
if checkProcess "${1}"; then
printf "%-30s%s" "${1} status:" "[RUNNING]"
else
printf "%-30s%s" "${1} status:" "[DOWN]"
fi
echo # <-- I know, being lazy here for the new line...
}
答案 0 :(得分:2)
使用printf而不是echo来做这种事情。类似的东西:
printf "%-30s%s" "left justified text" "[status]"
如果您的流程名称长于您选择的任何长度,则他们会错过对齐(即printf
不会截断)。
答案 1 :(得分:1)
使用printf而不是echo。例如:
printf "%-16s%s" "${1}" "[RUNNING]"
您必须将格式化的长度调整为最大预期值。