2011-12-30 5 views
6

저는 bash 스크립트를 작성 중이며 상태가 오른쪽 정렬 (OK, 경고, 오류 등) 인 메시지를 같은 행에 표시하려고합니다.Bash에서 텍스트 문자열을 오른쪽 정렬 및 왼쪽 정렬하는 방법

색상이 없으면 맞춤이 완벽하지만 색상을 추가하면 올바르게 정렬 된 열이 다음 줄로 잘못 포장됩니다. 인쇄되지 않는 시퀀스 (색상 변경)을 갖는 것은 더 이상, 라인이 단축되지해야한다 - 그것은 다음 줄로 줄 바꿈 줄 이유

#!/bin/bash 

log_msg() { 
    RED=$(tput setaf 1) 
    GREEN=$(tput setaf 2) 
    NORMAL=$(tput sgr0) 
    MSG="$1" 
    let COL=$(tput cols)-${#MSG} 

    echo -n $MSG 
    printf "%${COL}s" "$GREEN[OK]$NORMAL" 
} 

log_msg "Hello World" 
exit; 

답변

6

잘 모르겠어요. 나를 위해 작품을 보상하기 위해 라인을 확대 (그리고 BTW 나는 실제 메시지의 printf 대신 echo -n을 사용하는 것이 좋습니다 것은) :

log_msg() { 
    RED=$(tput setaf 1) 
    GREEN=$(tput setaf 2) 
    NORMAL=$(tput sgr0) 
    MSG="$1" 
    let COL=$(tput cols)-${#MSG}+${#GREEN}+${#NORMAL} 

    printf "%s%${COL}s" "$MSG" "$GREEN[OK]$NORMAL" 
} 
+0

이것은 완벽하게 작동했습니다. echo -n 대신 printf를 사용하는 것에 대한 팁을 주셔서 감사합니다. –

+0

printf에 좋은 팁. 그냥 내가 왼쪽으로 조정 된 텍스트가 필요할 때 :) – oligofren

3

당신은 색상에 의해 제공되는 여분의 공간을 차지합니다.

log_msg() { 
    RED=$(tput setaf 1) 
    GREEN=$(tput setaf 2) 
    NORMAL=$(tput sgr0) 
    MSG="$1" 
    STATUS="[OK]" 
    STATUSCOLOR="$GREEN${STATUS}$NORMAL" 
    let COL=$(tput cols)-${#MSG}+${#STATUSCOLOR}-${#STATUS} 

    echo -n $MSG 
    printf "%${COL}s\n" "$STATUSCOLOR" 
} 
관련 문제