Bash отказывается выполнять правильный двоичный файл

Я установил текущую версию 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 внутренний кеш для бинарных локаций (я смутно помню, что-то слышал об этом)?

Что было бы возможным исправить?

1
задан 27 May 2013 в 14:58

2 ответа

В 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
0
ответ дан 27 May 2013 в 14:58

Весьма вероятно, что /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.

0
ответ дан 27 May 2013 в 14:58

Другие вопросы по тегам:

Похожие вопросы: