2016-03-06 2 views
0

Хотя мой Unix PATH включает /Library/TeX/texbin, этот компонент моего PATH, похоже, игнорируется. Например, когда я пытаюсьПочему мой ПУТЬ игнорируется?

pdftex --version 

я

-bash: PdfTeX: команда не найдена

в то время как

/Library/TeX/texbin/pdftex --version 

работ, как ожидалось.

Аналогично,

где -a PdfTeX

не дает никаких результатов.

Мой путь построен из двух источников: /private/etc/paths, который содержит

/Users/Rax/.cabal/bin 
/usr/local/bin 
/usr/bin 
/bin 
/usr/sbin 
/sbin 
/Users/Rax/bin 

и два дополнительных файла в /private/etc/paths.d/40-XQuartz и /private/etc/paths.d/TeX, которые содержат соответственно

/opt/X11/bin 

и

/Library/TeX/texbin 

Вместе эти 3 фила эс привести к ожидаемому PATH

$ echo $PATH 
/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin 

Все записи в других каталогах можно найти, как и ожидалось (включение тех, кто в /opt/X11/bin), но последняя запись, кажется, игнорируется (по крайней мере, когда фиксирующих исполняемых файлов).

Почему часть моего PATH игнорируется? Как я могу убедиться, что это не так, чтобы исполняемые файлы были найдены как ожидалось?


OS X 10.11.3

+0

Предположительно, 'which pdftex' дает« Нет pdftext в пути »? Это исключало бы немного туманную возможность чего-то под этим именем в одной из каталогов, которые ранее были на вашем пути, которые были неясными. –

+3

Вы уже пробовали это? 'hash -r' – Cyrus

+1

Есть ли какие-либо непечатаемые символы в $ PATH? Попробуйте 'printf '% q \ n" "$ PATH" 'и посмотреть, что это показывает. –

ответ

2

Это было отсортировано в комментариях, но я выложу в ответ на запись: проблема была из-за невидимый персонаж в PATH, что было интерпретируется как часть фактического имени каталога. В частности, это было пространство в конце, но вы могли получить тот же эффект от ряда других невидимых персонажей. (Я действительно предполагал, что один из файлов в paths.d был в текстовом формате DOS/Windows и имел возврат каретки в конце строки.)

Чтобы сделать невидимые символы более заметными, вы можете использовать printf или cat -vet:

$ printf "%q\n" "$PATH" 
/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin\ 
$ echo "$PATH" | LC_ALL=c cat -vet 
/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin $ 

Обратите внимание на \ в конце printf выход - это на самом деле следует пробел, но вы должны сделать вывод о том, что - и пространство перед $ в cat -vet выходе. Кстати, очень важно поставить ссылку на $PATH в двойные кавычки, так как без них пространство было бы обрезано.

Если бы это был возврат каретки вместо этого, вот что это выглядело бы так:

$ printf "%q\n" "$PATH" 
$'/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin\r' 
$ echo "$PATH" | LC_ALL=c cat -vet 
/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin^M$ 

В этом случае printf показывает возврат каретки, как \r (и заворачивает все это в $' ... ', чтобы указать, что экраны следует интерпретировать), в то время как cat -vet показывает это как ^M.

Смежные вопросы