Bash回声状态

时间:2014-05-09 08:29:00

标签: bash echo

我正在尝试创建一个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...
}

2 个答案:

答案 0 :(得分:2)

使用printf而不是echo来做这种事情。类似的东西:

printf "%-30s%s" "left justified text" "[status]"

如果您的流程名称长于您选择的任何长度,则他们会错过对齐(即printf不会截断)。

答案 1 :(得分:1)

使用printf而不是echo。例如:

printf "%-16s%s" "${1}" "[RUNNING]"

您必须将格式化的长度调整为最大预期值。