About a week ago, I added the following to the end of my .bash_profile script so set up tab completion for man pages:

function _man_pages()
    local cur opts prev
    cur="${COMP_WORDS[COMP_CWORD]}"      #Get the current word
    prev="${COMP_WORDS[COMP_CWORD - 1]}" #Get the previous word
    if [ "$prev" = "man" ];
        #We didn't use a section number
        #This lovely regex converts from the file path to the name of the page
        opts=$(find -E "/usr/share/man" -regex ".*/man[1-9n]/(${cur}.*)\.[1-9n].*$" | sed -E 's/^.*\/(.*)\.[1-9n].*$/\1/')
        #We entered a section number
        opts=$(find -E "/usr/share/man" -regex ".*/man${prev}/(${cur}.*)\.${prev}.*$" | sed -E "s/^.*\/(.*)\.${prev}.*$/\1/")

    COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    return 0

complete -F _man_pages man

However, when I updated to El Capitan this morning, it stopped working. I've successfully run the regex portion of the script in my terminal itself, so I'm confident that they are still correct. Can anyone explain why this is happening, and/or how to fix it?


UPDATE: After doing a little more digging, I've discovered that it still works for most man pages, just not man 2 or man 3. After looking in the correct folder it was before, the folders man2 and man3 are gone. I'm still able to do "man pthread_create" and get results, so those folders must have gone somewhere. I'll be back when I know more.

1 Answer 1


After some more digging, I found that I can do "man -W" to get a list of folders that man checks when looking for the pages themselves, including the one where pthread_create is.

P.S. It looks like it's in the Xcode app folder now.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .