Я установил текущую версию texlive (2012), которая устанавливает его двоичные файлы в /usr/local/texlive/2011/bin/i386-linux/
. Впоследствии я добавил этот каталог в переменную PATH, изменив файл /etc/environment
, поскольку я хочу, чтобы он был установлен для всех пользователей:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/texlive/2012/bin/i386-linux"
Затем я приступил к удалению пакетов texlive
apt-suite, так как Я получал ошибки, когда пытался скомпилировать .tex
документы, которые показали, что дистрибутив texlive 2009 поставлялся в комплекте с моим Lubuntu 12.04.
Теперь происходит нечто довольно странное:
~ which pdflatex
/usr/local/texlive/2012/bin/i386-linux/pdflatex
Так что, похоже, бинарный файл найден. Тем не менее, происходит следующее:
~ pdflatex foo.tex
/usr/bin/pdflatex: File not found!
Почему это выглядит как «/usr/bin/
? Это какой-то bash
внутренний кеш для бинарных локаций (я смутно помню, что-то слышал об этом)?
Что было бы возможным исправить?
В Bash действительно есть «кэш» для недавно просмотренных программ. Вы можете использовать hash -r
для очистки этого кэша в оболочке. Альтернативы:
/usr/bin/pdflatex file.tex
which
- внешняя программа. Он всегда будет сообщать о соответствии программы текущему состоянию. Чтобы выяснить, какая команда выполняется оболочкой, используйте встроенную функцию type
.
Демонстрация кеша:
$ which acpidump /usr/bin/acpidump $ type acpidump acpidump is /usr/bin/acpidump $ acpidump -h &>/dev/null # trigger a lookup $ type acpidump acpidump is hashed (/usr/bin/acpidump) $ mv ~/bin/acpidump{.x,} # make acpidump available in PATH $ which acpidump /home/peter/bin/acpidump $ type acpidump acpidump is hashed (/usr/bin/acpidump) $ hash -r # clear cache $ type acpidump acpidump is /home/peter/bin/acpidump
Весьма вероятно, что /usr/bin/pdflatex
является символической ссылкой на только что удаленный пакет, который, в свою очередь, не существует. Попробуйте ls -l /usr/bin/pdflatex
, чтобы увидеть, если он указывает на другой файл. Если это неработающая символическая ссылка (цель не существует), вы можете просто удалить ее и запустить следующий pdflatex
в PATH
.
which
фактически ищет первый исполняемый файл в PATH
, который существует . Другими словами, если вы ln -s /non-existing/path /usr/local/sbin/pdflatex
, он будет проигнорирован which
, даже если /usr/local/sbin
является первым в PATH
.