如何让 apropos 读取 MANPATH

如何让 apropos 读取 MANPATH

我是系统上的非特权用户,因此我在我的主目录中安装了一些软件。除了添加~/.local/usr/bin到 my 之外PATH,我还添加~/.local/usr/share/man到 my 中MANPATH,以便我可以查询这些包的手册页。

例如,这样的命令之一是cgdb.

man cgdb工作正常,它从我的MANPATH环境变量中获取手册页。

但是apropos cgdb( man -k cgdb, whatis cgdb) 不起作用。

$ apropos cgdb
cgdb: nothing appropriate

man apropos我当时读到man whatis可以使用重新生成whatis数据库makewhatis,但这似乎只能由系统目录中的特权用户来完成。我找不到任何方法在用户空间中执行此操作。

是否可以在非特权用户指向的非系统目录上使用apropos(又名)?man -kMANPATH

FWIW:这是在 CentOS 6 服务器上

$ uname -osrv
Linux 2.6.32-754.11.1.el6.x86_64 #1 SMP Tue Feb 26 15:38:56 UTC 2019 GNU/Linux
$ lsb_release -d
Description:    CentOS release 6.6 (Final)

答案1

apropos通常会读取预先生成的索引文件以提高速度,而不是搜索每个联机帮助页。

这意味着每当添加联机帮助页时都需要更新索引文件。

在 CentOS 6 上,系统手册页每晚通过/etc/cron.daily/makewhatis.cron.

现在makewhatis意思是能够使用该-o标志让您指定自己的目录。然而它似乎不起作用......

% makewhatis -v $HOME/man -o $HOME/man/whatis
about to enter /home/sweh/man
skipping /var/cache/man - whatis file is readonly
% cat man/whatis
% 

然而,makewhatis它是一个脚本,因此可以复制它并修改它以指定新路径:

% diff mymakewhatis /usr/sbin/makewhatis 
69c69
< DEFWHATISDIR=$HOME/man
---
> DEFWHATISDIR=/var/cache/man

现在:

% ./mymakewhatis -v $HOME/man 
about to enter /home/sweh/man
adding /home/sweh/man/man1/smbsh.1

我们可以看到它现在有一个条目:

% cat man/whatis 
smbsh                (1)  - Allows access to remote SMB shares using UNIX commands

apropos工作:

% man -k smbsh
smbsh                (1)  - Allows access to remote SMB shares using UNIX commands

相关内容