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.
这些变量不是应该始终存在以便我可以依赖它们吗?
man\xe2\x80\x99t不依赖PAGER. 在 Debian 上,用于查看输出的工具确定如下:
-P(或) 选项,则使用该选项;--pagerMANPAGER设置了环境变量,则使用它;PAGER设置了环境变量,则使用它;pager路径中存在并且可执行,则使用它;cat.pagerDebian 上是less默认的(请参阅 参考资料readlink -f /usr/bin/pager)。如果寻呼机cat被非空但不可执行的值覆盖,则覆盖不会\xe2\x80\x99t应用:man -P non-existent将失败并出现错误。
如果你想为PAGERetc设置你自己的值,你可以将它们添加到你的shell\xe2\x80\x99s启动文件中;对于 Bash(Debian 中的默认用户 shell),将它们添加到~/.bashrc.
您提到的环境变量(PAGER、EDITOR、VISUAL) don\xe2\x80\x99t 必须存在于 process\xe2\x80\x99 环境中,并且您可以\xe2\x80\x99t 期望它们存在。它们对于允许用户指定他们的首选项很有用,但您始终需要默认值。一些发行版尝试通过提供自己的通用命令来提供帮助,例如Debian 中的sensible-editor和sensible-pager。请参阅POSIX 为 shell 定义的环境变量,还是为任何不一定运行 shell 的进程定义的环境变量?对此进行更多讨论。