How do I add a directory to MANPATH or INFOPATH?

I think I understand the instructions given in How to add a directory to the PATH? about adding directories to $PATH. But I don't understand how to add directories to $MANPATH or $INFOPATH.

Also -- in googling around for help I have noticed that sometimes directions say export PATH=/usr/share/lib/something:$PATH and sometimes they say export PATH=$PATH:/usr/share/lib/something. Which is it?


  1. These 2 are almost the same:

    export PATH=/usr/share/lib/something:$PATH 
    export PATH=$PATH:/usr/share/lib/something
    

    The only difference is that the first one puts the directory to add in front and the second one puts it behind the current directories in $PATH. It only matters if there are commands inside /usr/share/lib/something that have the same name inside one of the directories in $PATH.

  2. To add directories to $MANPATH or $INFOPATH as required from the link you posted you do that by changing the config files inside the link.

    It says to open the global version of bash.bashrc with:

    sudo vi /etc/bash.bashrc
    

    and to add at the end:

    PATH=/usr/local/texlive/2010/bin/x86_64-linux:$PATH; export PATH
    MANPATH=/usr/local/texlive/2010/texmf/doc/man:$MANPATH; export MANPATH
    INFOPATH=/usr/local/texlive/2010/texmf/doc/info:$INFOPATH; export INFOPATH
    

    This sets $PATH, $MANPATH and $INFOPATH. And it also tells you to edit /etc/manpath.config with:

    sudo vi /etc/manpath.config
    

    and to add

    MANPATH_MAP /usr/local/texlive/2010/bin/x86_64-linux /usr/local/texlive/2010/texmf/doc/man
    

    underneath # set up PATH to MANPATH mapping.


If you are unsure about this make a backup 1st (never a bad thing) with:

sudo cp /etc/bash.bashrc /etc/bash.backup_$(date +"%Y_%m_%d").bashrc
sudo cp /etc/manpath.config /etc/manpath.backup_$(date +"%Y_%m_%d").config

The weird string changes into the current date. If you mess up just copy the backup back over the original file:

$ touch test1
$ cp test1 test1.$(date +"%Y_%m_%d")
$ ls
test1  test1.2014_11_14  

If your man pages are in /usr/local/myproject/man, all you need to do is add that to (the end of) /etc/manpath.config:

MANDATORY_MANPATH        /usr/local/myproject/man

x:y:z:$PATH or $PATH:x:y:z?

Barely different. $PATH contains a :-separated list of places where bash (the shell/terminal) should check for a program.

For example if you type cat the way the terminal understands what that means is to look through the first, second, third elements of $PATH, then save the first location it finds for later invocations of cat.

If I have two different versions of a program in two different places, with one of them being preferred, and $PATH tells the shell to search in the wrong order, then there's a problem. Otherwise, no problem.


export

Open a terminal and type

echo $a
a=5
echo a
echo $a

You'll see that a=5 set the variable value and $a refers to the variable name, not the value.

Open a second terminal and type echo $a. It should again be blank.

The difference between export and assignment (=) is explained here: https://stackoverflow.com/questions/1158091/defining-a-variable-with-or-without-export.