I installed texlive and I want to add it as an environment variable to my Path so that Emacs AucTeX can read it when I start emacs from the GUI or from the command line. So far I've read that emacs only reads files from ~/.profile
.
Therefore my plan is to add texlive to my path in .profile
to enable emacs GUI to read it and then source ~/profile
from .bashrc
in order for emacs that is started inside my non-login interactive GNOME terminal to see the path.
Note: I do not have a .profile
file in my home directory, only in my /etc
directory, and I'd rather not touch that one, but I have a .bash_profile
in my home directory. However I read that .bash_profile
is only run for an interactive login session aka console mode which I don't use.
.profile
file in my home directory and do the following:step 1: Create ~/.profile
Step 2: Add texlive environment variable to path in .profile
export PATH=/usr/local/texlive/2018/bin/x86_64-linux:$PATH
export MANPATH=/usr/local/texlive/2018/texmf-dist/doc/man:$MANPATH
export INFOPATH=/usr/local/texlive/2018/texmf-dist/doc/info:$INFOPATH
Step 3: Source .profile
from .bashrc
#Adding this at the bottom or start of .bashrc to source .profile when the terminal is opened.
if [-s ~/.profile]; then;
source ~/.profile;
fi
I know that there is a lot of apprehension towards sourcing .profile
from .bashrc
due to the risk of causing an infinte loop. However since I am creating a .profile
file from scratch this will not be a problem as it will not contain any code that references .bashrc
.
Additional info: My .bashrc
only contains code that sources ~/etc/bashrc
and one environment variable that was automatically added by Anaconda: export PATH="/home/Fedora_User/Anaconda3/bin:$PATH"
Keep in mind that I know gnome-terminal can be run as an interactive login shell but I have never done this and don't know if it will impact the performance of my terminal sessions.
Firstly, note that if you want ~/.profile
to be read, you'll need to remove ~/.bash_profile
, otherwise ~/.profile
will be ignored by Bash.
You are actually overcomplicating this a bit. PATH is set in /etc/environment
. It is always export
ed already, so it does not need to be exported again.
If you make changes to your PATH in ~/.profile
they will be inherited by every shell, whether it is a login shell, interactive or otherwise.
Other variables exported in ~/.profile
will also be passed into the environment, and will be available in every shell. ~/.profile
is read once when you log in to your session, and exported variables stay exported.
Sourcing ~/.profile
in ~/.bashrc
is a bad idea. ~/.profile
sources ~/.bashrc
so you will get an infinite loop. Even if ~/.profile
does not source ~/.bashrc
it is a bad idea to have ~/.bashrc
source ~/.profile
or any other file with assignments like
PATH=$PATH:/some/other/place
because every time an interactive shell starts another interactive shell the PATH will get extended... you'll end up with your PATH being
/original/path:/some/other/place:/some/other/place:/some/other/place
etc.
Your MANPATH assignment does not need to include $MANPATH
but it should start with a leading colon. Please see this question and its answer. By default MANPATH is unset and the correct path is dynamically determined (in some way I don't understand), so including the existing MANPATH does nothing. You may need to start the MANPATH assignment with a colon to avoid preventing the path being determined dynamically. As far as I know, the same goes for INFOPATH
Therefore, I suggest:
Rename ~/.bash_profile
~/.profile
Add the lines:
PATH="$PATH:/usr/local/texlive/2018/bin/x86_64-linux"
export MANPATH=":/usr/local/texlive/2018/texmf-dist/doc/man"
export INFOPATH=":/usr/local/texlive/2018/texmf-dist/doc/info"
Notes that I have appended to the PATH rather than prepending. You can prepend (put $PATH
at the end instead of the beginning) if you want to. The first executable found in path lookup is run, so if two programs in different PATH locations have the same name, the one in the directory that comes first (further to the left) in PATH will be run.
Do not add anything to your ~/.bashrc
. Environment variables modified, or new variables exported in ~/.profile
will be available to every shell and don't need to be additionally set elsewhere.
Also note that you should not source /etc/bash.bashrc
in ~/.bashrc
, because /etc/bash.bashrc
is already sourced by every interactive shell first*, and we use ~/.bashrc
to make subsequent adjustments.
*An exception - /etc/bash/bashrc
checks that the shell is interactive using an unreliable method - it checks that PS1 is set. If you start a shell unsetting PS1, /etc/bash.bashrc
will not be sourced, even though the shell is interactive. Another exception is when the shell is started with --norc
, but that's more obvious.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments