Skip to content

Instantly share code, notes, and snippets.

@quickshiftin
Created February 21, 2014 07:25
Show Gist options
  • Star 40 You must be signed in to star a gist
  • Fork 13 You must be signed in to fork a gist
  • Save quickshiftin/9130153 to your computer and use it in GitHub Desktop.
Save quickshiftin/9130153 to your computer and use it in GitHub Desktop.
Running GNU coreutils via Homebrew on your Mac? Here's a one-liner to get the manpages working!
# Short of learning how to actually configure OSX, here's a hacky way to use
# GNU manpages for programs that are GNU ones, and fallback to OSX manpages otherwise
alias man='_() { echo $1; man -M $(brew --prefix)/opt/coreutils/libexec/gnuman $1 1>/dev/null 2>&1; if [ "$?" -eq 0 ]; then man -M $(brew --prefix)/opt/coreutils/libexec/gnuman $1; else man $1; fi }; _'
@quickshiftin
Copy link
Author

Follow an article like this describing how to use Homebrew to setup GNU coreutils et al on your Mac.

Then when you want to spend less than a minute getting the manpages to work with both your new GNU programs and your Mac programs you still want to be able to use (like mdfind), paste this gist in your ~/.profile and away you go!

@LeeMendelowitz
Copy link

Thanks for this solution!

@liselorev
Copy link

Additionally, if one wants to make it available system-wide, one could add the lines to
/etc/paths
/etc/manpaths
Where /usr/libexec/path_helper would include them.

    $> PA1="$(brew --prefix coreutil)/libexec/" ;
    $> : ; # expand slashes (for sed use)
    $> BINPA ="${PA1//\//\\/}gnubin" ;
    $> MANPA ="${PA1//\//\\/}gnuman" ;
    $> : ; # put as first line
    $> sudo sed -i'' -e '1s/^/'"${BINPA}"'\n/' /etc/paths ;
    $> sudo sed -i'' -e '1s/^/'"${MANPA}"'\n/' /etc/manpaths ;

@StrikeW
Copy link

StrikeW commented Jan 24, 2015

This solution makes the [section] argument for man fail to work.
e.g:
man 2 read can not find the man page for read in section 2.

@ChrisCummins
Copy link

Not one to settle for hacky work-arounds, I did a bit of googling and eventually found this solution to work for adding the gnu manpages:

  1. Open the file /etc/man.conf
  2. Add a line:
MANPATH_MAP /usr/local/opt/coreutils/libexec/gnubin /usr/local/opt/coreutils/libexec/gnuman

Hope that helps!

@JacobDorman
Copy link

Strange bug for me. Once i use man ... sudo is aliased to that function.

screen shot 2016-02-15 at 5 14 27 pm

@tasmo
Copy link

tasmo commented Feb 24, 2016

@JacobDorman Do you use oh-my-zsh or prezto? There is an alias for sudo(!) which causes this failure. So try to comment out the line alias _='sudo' or add a line with unalias _ before the man alias.

@tasmo
Copy link

tasmo commented Feb 24, 2016

The alias is not working with bash.

@JacobDorman
Copy link

@tasmo Ahh so there is. I never use that. unalias _ fixes the issue.

@OJFord
Copy link

OJFord commented Oct 8, 2016

What's wrong with just putting /usr/local/opt/coreutils/libexec/gnuman at the front of $MANPATH?

@SystemDisc
Copy link

SystemDisc commented Jan 28, 2017

I have the same question as @OJFord. Why not just export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"?

@si9ma
Copy link

si9ma commented Feb 3, 2019

man section will not work, use $@ instead of $1

alias man='_() { echo $@; man -M $(brew --prefix)/opt/coreutils/libexec/gnuman $@ 1>/dev/null 2>&1;  if [ "$?" -eq 0 ]; then man -M $(brew --prefix)/opt/coreutils/libexec/gnuman $@; else man $@; fi }; _'

@ciscohack
Copy link

This man hack command now not working in macOS 12.3.1 .. when i put this in my alias file and try to type man it stuck on "ma" only.. shall we have new workaround

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment