6

It seems like everytime I install textlive distro on one of my computers I have the same problem:

peter@msideb:~$ tlmgr --gui
bash: tlmgr: command not found

The below reflects the current state of my .profile:

    # ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

PATH=/home/peter/texlive/2011/bin/i386-linux:/home/peter/bin/:$PATH; export PATH
MANPATH=/home/peter/texlive/2011/texmf/doc/man:$MANPATH; export MANPATH
INFOPATH=/home/peter/texlive/2011/texmf/doc/info:$INFOPATH; export INFOPATH

My system: Deb 6 testing, 32 bit, xfce desktop environment.

And yes, I did log off after I edited the .profile file.

Yes, I appear to have the .bashrc file:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# don't overwrite GNU Midnight Commander's setting of `ignorespace'.
HISTCONTROL=$HISTCONTROL${HISTCONTROL+:}ignoredups
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
ptrcao
  • 6,603
  • 1
    Isn't the usual install location would be \usr/texbin? If you type the PATH command into your shell manually, does which tlmgr find it? – Peter Grill Sep 09 '11 at 02:11
  • 1
    I believe a similar question was answered in this forum here. Although the question pertains to setting up KILE, you'll find that the answer with the most votes explains how to generically set up the path of TeXLive for all users. See if that helps. – Bill Sep 09 '11 at 02:41
  • @Peter Grill: How do you mean? What should I type into my terminal to do what you propose? Also I installed to /home/peter/texlive/2011, so isn't that going to be my path? – ptrcao Sep 09 '11 at 02:45
  • 1
    I was suggesting that you cut and paste the PATH command from your .profile into your command line and see if that sets the path correctly. If so, then you need to find out why the .profile is not being executed. If it doesn't result in the correct path, then you need to fix that path. – Peter Grill Sep 09 '11 at 03:05
  • Can you run $ echo $PATH and post the result? By the way, on the third line from the bottom of your .profile, you do not need to specifically include /home/peter/bin in your path, it should already be included by the conditional block immediately above that. – Jan Hlavacek Sep 09 '11 at 04:02
  • @Jan Hlavacek: $ echo $PATH gives: /usr/local/bin:/usr/bin:/bin:/usr/games. What does that tell you? – ptrcao Sep 09 '11 at 06:19
  • @Peter Grill: If I manually pased PATH=/home/peter/texlive/2011/bin/i386-linux:$PATH; export PATH into terminal and then run tlmgr --gui, it works! So you may be right, it isn't executing .profile for some reason. What do I need to do now? – ptrcao Sep 09 '11 at 06:26
  • Looking at line 2 in the file, do you have one of the files ~/.bash_profile or ~/.bash_login? – Andrew Stacey Sep 09 '11 at 06:38
  • @Andrew Stacey: I have a number of similar sounding files such as .bashrc, .bash_history, .bash_logout in my /home/peter directory. What do I need to do about this? – ptrcao Sep 09 '11 at 08:59
  • From what you say, it looks as though bash isn't reading this file. I found http://freeunix.dyndns.org:8088/site2/howto/Bash.shtml which says that bash looks for .bash_profile, then .bash_login, and finally .profile and it loads only one of these. Also, it only loads this on login. It may be the case that logging in via X does not count as an actual login (see http://linuxgazette.net/161/okopnik.html) so this might never be read even if the other files aren't there. Try putting the code in .bashrc instead. – Andrew Stacey Sep 09 '11 at 09:11
  • @Andrew Stacey: I've tried restarting my computer with the PATH details inserted at the end of .bashrc and zzz-texlive.sh, with the path amended to my home directory where I installed texlive. What should I do now...? – ptrcao Sep 09 '11 at 09:39
  • Give me a login on your computer so I can take a look ??? Only joking!. Put in to each of the possible files the command export BASHRCWASREAD="bashrc was read" (with suitable changes). Then log out, log in, and try echo $BASHRCWASREAD (and for each). Also, take a look in .xsession_errors to see if there's anything obvious in there (maybe a syntax error in one of the files). Try also source .bashrc (and the others) from the command line to see if there are any errors. – Andrew Stacey Sep 09 '11 at 09:49

2 Answers2

7

Create as root a file named zzz-texlive.sh with the contents:

    export PATH=/usr/local/texlive/2011/bin/i386-linux:$PATH
    export MANPATH=/usr/local/texlive/2011/texmf/doc/man:$MANPATH
    export INFOPATH=/usr/local/texlive/2011/texmf/doc/info:$INFOPATH
    unset TEXINPUTS
    unset TEXMFCONFIG

Change the i386-linux to your personal directory name. Then save the file in the directory /etc/profile.d/. This script will be executed with every system start.

Finally, delete the lines in your ~/.bashrc which sets any path for texlive.

  • 1
    Delete which lines in my .bashrc? – ptrcao Sep 09 '11 at 08:55
  • 1
    @ptrcao delete the lines about adding to the PATH. – raphink Sep 09 '11 at 08:59
  • 1
    @Raphink: I can't find any explicit reference to PATH in my .bashrc file. See my original post for the contents of the file and please let me know what lines to remove. – ptrcao Sep 09 '11 at 09:03
  • @prtcao: well from your ~/.profile then, or wherever else you've added anything related to the PATH. – raphink Sep 09 '11 at 09:04
  • @Raphink: Is there a way I can put the changes into effect without logging out? I have a lot of windows open so it's a bit inconvenient to have to log out... – ptrcao Sep 09 '11 at 09:13
  • If you aim to build in a terminal, simply type bash. If you mean to use a dedicated program, I think it's easier to logout. – raphink Sep 09 '11 at 09:15
  • 1
    @Raphink + @ Herbert: I'm afraid it didn't work... I did what Herbert said. Ideas? – ptrcao Sep 09 '11 at 09:22
  • @ptrcao: where did you install TeXLive? – raphink Sep 09 '11 at 09:25
  • @ptrcao: in this case you should restart your computer and controll after log in the path setting –  Sep 09 '11 at 09:26
  • 1
    @Herbert: I've restarted my computer. Can you please clarify what the "control after log in the path setting" part means I need to do? – ptrcao Sep 09 '11 at 09:32
  • @Raphink: I installed it to /home/peter – ptrcao Sep 09 '11 at 09:33
  • @ptrcao: then adapt @Herbert's answer with that path instead of /usr/local/ – raphink Sep 09 '11 at 09:34
  • @Raphink: One step ahead of you. Already tried that. Three veterans on my case and we are still no closer... :( – ptrcao Sep 09 '11 at 09:36
  • 1
    @ptrcao: run echo $PATH and it should show as first the /usr/local/texlive/...` –  Sep 09 '11 at 09:43
  • 1
    @Herbert: /home/peter/texlive/2011/bin/unknown-linux:/usr/local/bin:/usr/bin:/bin:/usr/games - why does it say "unknown-linux"? Is that normal? – ptrcao Sep 09 '11 at 09:51
  • 1
    Try uname -m instead of uname -i. Test it on the command line first. Actually, unless you're going to copy this from machine to machine, there's no reason not to just put in the i386 explicitly. – Andrew Stacey Sep 09 '11 at 09:54
  • 1
    @Andrew Stacey + @Raphink: So the solution is very particular. Neither -i nor -m variant of the solution works. It seems to only acknowledge the explicit i386. I'm not sure why that is, perhaps you can rationalise it? Does it have anything to do with the fact I'm using kernel 3 or Debian testing? The other key thing is it reads .bashrc but not .profile or zzz-texlive.sh. – ptrcao Sep 09 '11 at 10:14
  • 1
    @Raphink + @Andrew Stacey: By the way guys, I get different things when I use different options for $uname. peter@msideb:~$ echo $uname -mgives `$i686`, while `peter@msideb:~$ echo $`uname -i gives $unknown. Neither of which correspond to what I thought my architecture was, namely i386! How would we get the correct answer with $uname? – ptrcao Sep 09 '11 at 10:29
  • 2
    That may be because bash reads .bashrc every time an interactive shell is started, while it reads .profile only when it is a login shell and interactive shell at the same time, or when it is invoked with the --login option. It seems that when you log in with your display manager, that does not happen. It could be a bug or a configuration problem with your display manager. – Jan Hlavacek Sep 09 '11 at 10:36
  • I just add the path at the front of the PATH setting in /etc/environment and then log out and in again – daleif Sep 09 '11 at 10:52
  • Some quick googling found this: http://linuxgazette.net/161/okopnik.html . I don't know how relevant it is today, but itt seems that gdm is seriously messed up, which does not surprise me. – Jan Hlavacek Sep 09 '11 at 10:55
  • @Jan: I found the same article! (See my comments on the main question). (Also see that I "continued this discussion in chat": http://chat.stackexchange.com/rooms/1311/discussion-between-andrew-stacey-and-ptrcao ) – Andrew Stacey Sep 09 '11 at 12:18
  • @Jan Hlavacek: Not entirely sure but apparently Xdm is my display manager. Does that tell you anything more? – ptrcao Sep 11 '11 at 02:50
  • 1
    @ptrcao Many, but not all, programs treat i386 and i686 as interchangeable names for the same architecture (Intel). – isomorphismes Sep 11 '11 at 04:19
  • A late aside: some weeks later I got fed up with Debian's rough edges and switched to Kubuntu. There I found it was sufficient to append the path details to .profile, even though .bashrc was present... Not sure if this contradicts our earlier observations that .profile was being ignored in the presence of .bashrc... – ptrcao Sep 25 '11 at 08:05
7

Mybe you can install TeXLive 2011 in /usr/local/texlive, and make symlinks for all the executables in /usr/local/bin. That way you don't have to alter $PATH.

Jan Hlavacek
  • 19,242
  • 1
    I cannot emphasize enough that this is the proper Unix-y way of adding programs that install to /usr/local/<name>/<loads of directories here>/ to $PATH. Remember to make them soft links (ln -s) - it makes it much easier to tell what's going on when you later come back to /usr/local/bin – kahen Oct 19 '11 at 11:09
  • This seems to be the better way to do it. Would you be able to elaborate on this answer a bit by adding some steps? – Magpie Feb 16 '13 at 21:06