다양한 검사를 거치는 스크립트가 있는데, 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/init
RES_COL
export RES_COL=100
저도 찾아보고 시도해봤는데 /etc/init.d/functions
안되더군요. 또한 결과 필드가오른쪽 정렬이에 대한 값을 하드코딩할 필요 없이 터미널 창을 사용하세요. 어떤 아이디어가 있나요?
답변1
변수를 올바르게 설정했다고 가정하면 이 tput
명령을 사용하여 커서를 제어할 수 있습니다. 및 변수 TERM
와 함께 사용하면 커서를 원하는 위치에 놓을 수 있습니다.LINES
COLUMNS
구문은 다음과 같습니다.
tput cup line column
예를 들어:
tput cup $((LINES-2)) $((COLUMNS-4));echo "[OK]"
답변2
이 파일을 사용하는 경우 이것이 시작 프로세스의 일부이고 TERM
환경이 설정되지 않았다고 가정할 수 있습니다(사용tput
실질적인 의미는 없습니다.) 이를 위해 하드코딩된 이스케이프 시퀀스를 사용합니다.
또한 RES_COL
값을 사용하지 않는 한 설정은 스크립트에 많은 영향을 미치지 않습니다. 이 파일(Fedora)에서만 사용됩니다.
자신만의 함수를 추가하고, 인쇄하려는 문자열을 전달하고 비교할 길이를 확인한 후 $RES_COL
, 길이가 더 길면 함수를 인쇄하고(줄을 완성하기 위해) 다음 줄에서 사용할 수 있습니다.$MOVE_TO_COL
echo_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"
추가 자료: