.bashrc의 if 문이 올바르게 작동하지 않습니다.

.bashrc의 if 문이 올바르게 작동하지 않습니다.

.bashrc터미널 너비가 80자 이상인 경우 긴 프롬프트가 표시되도록 설정했습니다 . 그렇지 않으면 성능이 저하되고 더 작은 프롬프트가 표시됩니다.

나는 if이것을 달성하기 위해 다음과 같은 진술을 사용합니다.

dp_smaller_than=80
if [ $COLUMNS -lt $dp_smaller_than ]
then
    PROMPT_COMMAND="degr_prompt"
else
    PROMPT_COMMAND="full_prompt"
fi

이 명령문 앞에 또는 다른 명령을 입력한 경우에만 올바르게 작동합니다 sleep 0. 그렇지 않으면 다음 오류가 표시됩니다.

[: -lt: unary operator expected

메모:파일 시작 부분에 degr_prompt및 기능이 정의되어 있습니다 .full_prompt

답변1

COLUMNS변수는 bash에 의해 설정됩니다 upon receipt of a SIGWINCH.( Shell Variables섹션 참조 man bash). 이는 환경 변수가 아니기 때문에 스크립트에 설정되지 않습니다. 자신을 확인하세요:

$ export COLUMNS=$COLUMNS
$ ./your-script.sh

이제 작동합니다. COLUMNS스크립트에서 값을 검색해야 합니다 . 예를 들어 다음 을 사용할 수 있습니다 tput.

$ tput cols
186

답변2

COLUMNS에 어떻게든 설정되어 있지 않습니다 .bashrc.

다음과 같이 열을 얻으십시오 tput cols.

dp_smaller_than=80
if [ $(tput cols) -lt $dp_smaller_than ]
then
    PROMPT_COMMAND="degr_prompt"
else
    PROMPT_COMMAND="full_prompt"
fi

관련 정보