shell “man”命令在mac终端返回重复的结果

jjjwad0x  于 2023-10-23  发布在  Shell
关注(0)|答案(3)|浏览(101)

当我

man -k "^printf"

在终端中,返回以下重复结果:

printf(1)                - formatted output
printf(1)                - formatted output
printf(3), fprintf(3), sprintf(3), snprintf(3), asprintf(3), dprintf(3), vprintf(3), vfprintf(3), vsprintf(3), vsnprintf(3), vasprintf(3), vdprintf(3) - formatted output conversion

还有…当我

man -k 1

它还返回一堆重复的结果。
这是一台新的M1 MAX Mac,我甚至还没有做任何设置更改,但上面的问题实际上正在发生。我的新Mac怎么了?

j2datikz

j2datikz1#

苹果的man(1)中有一个bug,最近是Ventura 13.4.1。如果您的路径中有groff(1),并且没有预先格式化的“cat”页面,则请求的页面将显示两次。
/usr/bin/man中,参见函数man_display_page()。如果groff(1)$PATH上,则调用man_display_page_groff()(第一次显示页面),之后脚本 * 应该 * 返回;但是它错误地福尔斯通过并再次显示该页面。该问题在此处下游标记:
https://github.com/Homebrew/homebrew-core/issues/133561
我还通过feedbackassistant.apple.com向Apple报告了这个问题(这些门票不能公开共享)。

rlcwz9us

rlcwz9us2#

你可以执行man -w,看看这个人在哪里查找手册页。如果您的系统在多个路径中有手册页的副本,则会出现此问题(使用man -k printf时结果重复)。
在我的系统中,有多个人的路径。下面是我的man -w的输出。

/usr/local/opt/w3m/share/man/de:/usr/local/opt/w3m/share/man:/usr/local/opt/binutils/share/man:/Users/xx/opt/anaconda3/share/man:/usr/local/share/man/de:/usr/local/share/man:/usr/share/man:/Library/TeX/texbin/man:/opt/X11/share/man:/Library/Apple/usr/share/man:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/share/man:/Applications/Xcode.app/Contents/Developer/usr/share/man:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man

除此之外,下面两个有一些复制的手册页。例如,printf可以在两个路径中找到。

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/share/man/

/usr/share/man/

如果在MANPATH中执行ls -l,您将看到两者都有一些相同手册页的副本。

> ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/share/man/
man1 man2 man3 man4 man5 man6 man7 man8 man9 mann

> ls /usr/share/man/
man1 man4 man5 man6 man7 man8 man9 mann
  • 简而言之,当您执行man -k somecommand时,它会显示man -w中包含的所有路径的结果。如果你想避免这种情况,你需要修改$MANPATH环境变量。将其设置为你希望你的人命令看的路径。*
cbjzeqam

cbjzeqam3#

正如Kurt Starsinic指出的那样,macOS man二进制文件中存在一个错误。
我们可以通过以下步骤来解决这个问题,以覆盖系统man

brew install man-db
cd $(brew --repo)/bin
ln -s gman man

相关问题