bash:在窗口的右端回显某些内容(右对齐)

bash:在窗口的右端回显某些内容(右对齐),bash,Bash,我正在寻找在bash中正确对齐的成功/失败消息。一个例子是apache2在执行时产生的结果:sudo/etc/init.d/apache2 reloadetc 在上面的示例中,apache2生成了非常好且简洁的右对齐的[OK]或[fail]消息 另外,我想知道如何获得红色文本,以防我们生成一条[fail]消息。#/bin/bash #!/bin/bash RED=$(tput setaf 1) GREEN=$(tput setaf 2) NORMAL=$(tput sgr0) col=80

我正在寻找在bash中正确对齐的成功/失败消息。一个例子是apache2在执行时产生的结果:
sudo/etc/init.d/apache2 reload
etc

在上面的示例中,apache2生成了非常好且简洁的右对齐的
[OK]
[fail]
消息

另外,我想知道如何获得红色文本,以防我们生成一条
[fail]
消息。

#/bin/bash
#!/bin/bash

RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
NORMAL=$(tput sgr0)

col=80 # change this to whatever column you want the output to start at

if <some condition here>; then
  printf '%s%*s%s' "$GREEN" $col "[OK]" "$NORMAL"
else
  printf '%s%*s%s' "$RED" $col "[FAIL]" "$NORMAL"
fi
红色=$(tput setaf 1) 绿色=$(tput setaf 2) 正常=$(tput sgr0) col=80#将其更改为希望输出开始的任何列 如果;然后 printf“%s%*s%s'$GREEN“$col”[OK]“$NORMAL” 其他的 printf“%s%*s%s'$RED“$col”[FAIL]“$NORMAL” fi
看看这个线程,可能会很有趣:

在Linux CentOS 6.5上,我使用/etc/init.d/functions文件:

#!/bin/bash
. /etc/init.d/functions # include the said file

action "Description of the action" command

exit 0
假设
command
在成功时返回
0
,如果发生错误,则返回正值。 为了让脚本易于阅读,我使用函数调用而不是整个命令

以下是一个例子:

#!/bin/bash

. /etc/init.d/functions

this_will_fail()
{
    # Do some operations...
    return 1
}

this_will_succeed()
{
    # Do other operations...
    return 0
}


action "This will fail"     this_will_fail
action "This will succeed"  this_will_succeed

exit 0
导致: (注:法语地区;-))


希望能有帮助

这里的内容主要基于centos的“函数”脚本,但更为精简

#!/bin/bash

RES_COL=60
MOVE_TO_COL="printf \\033[${RES_COL}G"

DULL=0
BRIGHT=1

FG_BLACK=30
FG_RED=31
FG_GREEN=32
FG_YELLOW=33
FG_BLUE=34
FG_MAGENTA=35
FG_CYAN=36
FG_WHITE=37

ESC="^[["
NORMAL="${ESC}m"
RESET="${ESC}${DULL};${FG_WHITE};${BG_NULL}m"

BLACK="${ESC}${DULL};${FG_BLACK}m"
RED="${ESC}${DULL};${FG_RED}m"
GREEN="${ESC}${DULL};${FG_GREEN}m"
YELLOW="${ESC}${DULL};${FG_YELLOW}m"
BLUE="${ESC}${DULL};${FG_BLUE}m"
MAGENTA="${ESC}${DULL};${FG_MAGENTA}m"
CYAN="${ESC}${DULL};${FG_CYAN}m"
WHITE="${ESC}${DULL};${FG_WHITE}m"

SETCOLOR_SUCCESS=$GREEN
SETCOLOR_FAILURE=$RED
SETCOLOR_NORMAL=$RESET

echo_success() {
  $MOVE_TO_COL
  printf "["
  printf $SETCOLOR_SUCCESS
  printf $"  OK  "
  printf $SETCOLOR_NORMAL
  printf "]"
  printf "\r"
  return 0
}

echo_failure() {
  $MOVE_TO_COL
  printf "["
  printf $SETCOLOR_FAILURE
  printf $"FAILED"
  printf $SETCOLOR_NORMAL
  printf "]"
  printf "\r"
  return 1
}

action() {
  local STRING rc

  STRING=$1
  printf "$STRING "
  shift
  "$@" && echo_success $"$STRING" || echo_failure $"$STRING"
  rc=$?
  echo
  return $rc
}

action testing true
action testing false

使用printf;请参见@SiegeX:
col=$(tput cols)
比硬编码好,并且与其他
tput
用途更一致。此外,您的方法会为颜色转义占用额外的空间,而实际上不会占用任何空间
printf'%s%*s%s'$GREEN'$col'[OK]'“$NORMAL”
可能更干净。@geek:我决定不使用
tput cols
tput cup
,因为前者不能让您灵活地指定列(它的毛边看起来可能不是最好的)后者需要第#行。@SiegeX:对于后者,您可以使用
tput hpa
。@geek:没错,总是忘记那个。在这两种情况下,我都没有意识到,使用单个
%s
printf会占用不可打印字符上的空间。所以,虽然我认为我的方式更容易阅读,但你的方式更正确,我会改变它。谢天谢地,这是占用空间的
%*s
printf
假设对应字符串中的每个字符都会占用字段中的空间,并进行右对齐;在<>代码> \n>代码>等情况下,不存在转义序列的概念(甚至不考虑计算字段宽度)。请注意,<代码> /ETC/init .d/函数< /> >修改<代码> $PATH < /代码>。