为什么 PAGER、EDITOR、VISUAL 为空?

alx*_*act 0 shell bash pager environment-variables

当我尝试使用这些环境变量时,我得到一个空字符串:

$ $PAGER some_file;
bash: some_file: command not found
$
Run Code Online (Sandbox Code Playgroud)

我测试了一些东西:

$ 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
Run Code Online (Sandbox Code Playgroud)

为什么?我该如何使用这些变量?

env |grep PAGER什么也没显示。

我的系统是Debian 11(测试)


编辑:

我的目的是编写一个依赖寻呼机的脚本。

我会使用less,但我不能保证它会存在,所以我想使用$PAGER.

这些变量不是应该始终存在以便我可以依赖它们吗?

Ste*_*itt 5

man\xe2\x80\x99t不依赖PAGER. 在 Debian 上,用于查看输出的工具确定如下

\n
    \n
  • 如果设置了-P(或) 选项,则使用该选项;--pager
  • \n
  • 如果MANPAGER设置了环境变量,则使用它;
  • \n
  • 如果PAGER设置了环境变量,则使用它;
  • \n
  • 如果pager路径中存在并且可执行,则使用它;
  • \n
  • 否则(或者如果寻呼机被空值覆盖),请使用cat.
  • \n
\n

pagerDebian 上是less默认的(请参阅 参考资料readlink -f /usr/bin/pager)。如果寻呼机cat被非空但不可执行的值覆盖,则覆盖不会\xe2\x80\x99t应用:man -P non-existent将失败并出现错误。

\n

如果你想为PAGERetc设置你自己的值,你可以将它们添加到你的shell\xe2\x80\x99s启动文件中;对于 Bash(Debian 中的默认用户 shell),将它们添加到~/.bashrc.

\n

您提到的环境变量(PAGEREDITORVISUAL) don\xe2\x80\x99t 必须存在于 process\xe2\x80\x99 环境中,并且您可以\xe2\x80\x99t 期望它们存在。它们对于允​​许用户指定他们的首选项很有用,但您始终需要默认值。一些发行版尝试通过提供自己的通用命令来提供帮助,例如Debian 中的sensible-editorsensible-pager。请参阅POSIX 为 shell 定义的环境变量,还是为任何不一定运行 shell 的进程定义的环境变量?对此进行更多讨论。

\n