これらの環境変数を使用しようとすると、空の文字列が表示されます。
$ $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
。
pager
Debianのデフォルト値less
(参考資料を参照readlink -f /usr/bin/pager
)。cat
NULLではないが実行できない値でポケットベルを上書きすると、オーバーライドは適用されず、man -P non-existent
エラーで失敗します。
などの独自の値を設定するには、PAGER
Bash(Debianのデフォルトのユーザーシェル)用のシェル起動ファイルに追加するだけです~/.bashrc
。
言及した環境変数(PAGER
、、、 )はプロセス環境に存在EDITOR
するVISUAL
必要はなく、存在すると期待することもできません。ユーザーが自分の設定を指定できるようにするのに便利ですが、常にデフォルトが必要です。一部のディストリビューションでは、ユニークな汎用コマンドを提供して助けを求めています。sensible-editor
sensible-pager
Debian で。バラより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
使用されますless
。cat
MANPAGER
PAGER
また、シェルでは、;
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