디스플레이 명령 결과는 터미널 오른쪽 정렬로 표시됩니다.

디스플레이 명령 결과는 터미널 오른쪽 정렬로 표시됩니다.

다양한 검사를 거치는 스크립트가 있는데, success터미널에서 작업 결과를 명확하게 표시하기 위해 에 정의된 , 함수를 사용합니다.failure/etc/init.d/functions

더 많은 텍스트를 인쇄한 다음 결과 상자를 표시하는 경우를 제외하고는 잘 작동합니다.내 문자에:

/usr/share/app/lib/lib_mylib.so lib[ OK ]o matches as expected

표시하고 싶은 위치:

/usr/share/app/lib/lib_mylib.so lib_mylib.so matches as expected [ OK ]

주위를 둘러보니 결과 필드를 인쇄할 위치를 지정하기 위해 /etc/init.d/functions변수를 사용하고 있는 것으로 나타났습니다 . 존재 RES_COL하는 경우 거기에서 가져오십시오 . 기본값은 60자입니다./etc/sysconfig/initRES_COL

export RES_COL=100저도 찾아보고 시도해봤는데 /etc/init.d/functions안되더군요. 또한 결과 필드가오른쪽 정렬이에 대한 값을 하드코딩할 필요 없이 터미널 창을 사용하세요. 어떤 아이디어가 있나요?

답변1

변수를 올바르게 설정했다고 가정하면 이 tput명령을 사용하여 커서를 제어할 수 있습니다. 및 변수 TERM와 함께 사용하면 커서를 원하는 위치에 놓을 수 있습니다.LINESCOLUMNS

구문은 다음과 같습니다.

tput cup line column

예를 들어:

tput cup $((LINES-2)) $((COLUMNS-4));echo "[OK]"

답변2

이 파일을 사용하는 경우 이것이 시작 프로세스의 일부이고 TERM환경이 설정되지 않았다고 가정할 수 있습니다(사용tput실질적인 의미는 없습니다.) 이를 위해 하드코딩된 이스케이프 시퀀스를 사용합니다.

또한 RES_COL값을 사용하지 않는 한 설정은 스크립트에 많은 영향을 미치지 않습니다. 이 파일(Fedora)에서만 사용됩니다.

자신만의 함수를 추가하고, 인쇄하려는 문자열을 전달하고 비교할 길이를 확인한 후 $RES_COL, 길이가 더 길면 함수를 인쇄하고(줄을 완성하기 위해) 다음 줄에서 사용할 수 있습니다.$MOVE_TO_COLecho_success또는 에서 응답을 인쇄하기 전에 응답 열로 이동된 문자열입니다 echo_failure.

예를 들어 다음과 같이 호출할 수 있습니다 action.

action() {
    local STRING rc

    STRING=$1
    echo -n "$STRING "
    shift
    "$@" && success $"$STRING" || failure $"$STRING"
    rc=$?
    echo
    return $rc
}

명령 출력을 리디렉션하여 출력을 캡처할 수 있습니다. 이는 라인을 방해하지만 rc=$?bash의 변수에서 얻을 수 있습니다.$PIPESTATUS

    local RESULT
    RESULT=$("$@" 2>&1)
    rc=$PIPESTATUS
    echo -n "$RESULT"
    [ ${#RESULT} -ge $RES_COL ] && echo
    [ $rc = 0 ] success $"$STRING" || failure $"$STRING"

추가 자료:

관련 정보