PAGER, EDITOR 및 VISUAL이 비어 있는 이유는 무엇입니까?

PAGER, EDITOR 및 VISUAL이 비어 있는 이유는 무엇입니까?

이러한 환경 변수를 사용하려고 하면 빈 문자열이 표시됩니다.

$ $PAGER some_file;
bash: some_file: command not found
$

나는 몇 가지를 테스트했습니다.

$ echo $PAGER;

$ man man;     ## Here it's using less(1)
$ export PAGER;
$ man man;     ## Still using less(1)
$ PAGER='';
$ echo $PAGER;

$ man man;     ## Here it uses cat(1)
$ export PAGER;
$ man man;     ## Here it uses cat(1), too
$ unset PAGER;
$ man man;     ## Here it uses less(1) again

왜? 이 변수를 어떻게 사용할 수 있나요?

env |grep PAGER아무것도 표시되지 않습니다.

내 시스템은 Debian 11(테스트)입니다.


편집하다:

내 의도는 호출기에 의존하는 스크립트를 작성하는 것입니다.

을 사용하고 싶지만 less거기에 있을 것이라고 보장할 수 없으므로 을 사용하고 싶습니다 $PAGER.

이러한 변수는 내가 의존할 수 있도록 항상 존재해야 하는 것 아닌가요?

답변1

man아니요의지하다존재하다 PAGER. 데비안에서 출력을 보는 도구는 다음과 같습니다.다음과 같이 결정:

  • (또는) 옵션을 설정하면 -P이 옵션이 사용됩니다.--pager
  • MANPAGER환경 변수가 설정 되면 해당 변수가 사용됩니다.
  • PAGER환경 변수가 설정 되면 해당 변수가 사용됩니다.
  • pager경로에 존재하고 실행 가능한 경우 이를 사용하십시오.
  • 그렇지 않은 경우(또는 호출기가 null 값으로 덮어쓰여진 경우) cat.

pagerDebian의 기본값 less(참고자료 참조 readlink -f /usr/bin/pager). catNull은 아니지만 실행할 수 없는 값으로 호출기를 덮어쓰는 경우 재정의는 적용되지 않으며 man -P non-existent오류와 함께 실패합니다.

등에 대한 자신만의 값을 설정 하려면 PAGERBash(Debian의 기본 사용자 셸)용 셸 시작 파일에 추가하면 됩니다 ~/.bashrc.

언급한 환경 변수( PAGER, EDITOR, VISUAL)는 프로세스 환경에 존재할 필요가 없으며 존재할 것이라고 기대할 수도 없습니다. 사용자가 자신의 기본 설정을 지정할 수 있도록 하는 데 유용하지만 항상 기본값이 필요합니다. 일부 배포판은 고유한 범용 명령을 제공하여 도움을 주려고 합니다.sensible-editorsensible-pager데비안 에서. 바라보다POSIX 환경 변수가 셸에 대해 정의되어 있습니까? 아니면 반드시 셸을 실행할 필요가 없는 프로세스에 대해 정의되어 있습니까?이에 대한 추가 토론.

답변2

많은 구현이 있지만 일반적인 것부터 man시작합니다.man man사람 데이터베이스데비안에서도 사용되는 프로젝트는 다음과 같이 말합니다:

   -P pager, --pager=pager
          Specify  which  output pager to use.  By default, man uses less,
          falling back to cat if less is not found or is  not  executable.
          This  option overrides the $MANPAGER environment variable, which
          in turn overrides the $PAGER environment variable.   It  is  not
          used in conjunction with -f or -k.

그리고:

  ENVIRONMENT
    (...)
       MANPAGER, PAGER
              If $MANPAGER or $PAGER is set ($MANPAGER is used in preference),
              its value is used as the name of the program used to display the
              manual page.  By default, less is used, falling back to  cat  if
              less is not found or is not executable.

따라서 관찰할 수 있듯이 및 둘 다 설정되지 않은 경우 기본값이 man사용됩니다 less.catMANPAGERPAGER

또한 셸에서는 ;C처럼 각 줄 끝에 변수를 추가할 필요가 없으며 변수 내보내기는 한 줄로 수행할 수 있습니다.

export PAGER=''

또는 단일 명령에 대해 임시로 설정하십시오.

PAGER='' man man

답변3

변수를 사용하지만 기본값으로 돌아가려면 다음을 사용하세요.${var:-default} 매개변수 확장:

"${PAGER:-less}" "$some_file"

man과 같은 일련의 기본값 목록을 가지려면 다음을 수행하십시오.

myPager=""
for p in "$MANPAGER" "$PAGER" less cat; do
    myPager=$(type -p "$p") && break
done
if [[ -z $myPager ]]; then
    echo "Panic! not even cat can be found!" >&2
    exit 255
fi

관련 정보