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。 Debian で出力を表示するツールは次のとおりです。次のように決定:

  • (または)オプションを設定すると、-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-pagerDebian で。バラよりPOSIX環境変数はシェルに対して定義されていますか?それとも、必ずしもシェルを実行する必要がないプロセスに対して定義されていますか?これに関するさらなる議論。

答え2

多くの実装がありますが、一般的なものから man始めます。man man人データベースDebian でも使用されるプロジェクトは次のように言います。

   -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使用されますlesscatMANPAGERPAGER

また、シェルでは、;Cのように各行の末尾に変数を追加する必要はなく、変数のエクスポートは1行で実行できます。

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

関連情報