.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

관련 정보