Переменная среды $ PATH, по-видимому, не распознается

Я сделал новую установку Debian Wheezy и установил zsh. Несколько дней спустя, я сделал ванильную установку TeX Live 2014, поэтому я добавил необходимые двоичные пути к моему $ PATH. Теперь я начал писать небольшие скрипты, поэтому хотел бы, чтобы они были куда-то доступными, то есть ~/bin .

Мой путь выглядит так:

 ~/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

Теперь, если бы я хотел запустить что-то из TeX Live, это легко:

 % which pdflatex /opt/texbin/pdflatex 

Нет проблем. Но когда я пытаюсь запустить что-то из ~/bin , …

 % which hello_world hello_world not found 

Поэтому я дважды проверял:

 % ls -l ~/bin total 18 -rwxr-xr-x 1 bozbalci bozbalci 5382 Sep 8 00:28 hello_world 

И это показывает, что hello_world отлично работает в ~/bin с установленными разрешениями на выполнение. Я пробовал rehash , но это не сработало. Помогите?

В командной оболочке, подобной

 PATH=~/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

тильда расширяется до вашего домашнего каталога, когда выполняется команда оболочки. Таким образом, полученное значение PATH является чем-то вроде /home/theconjuring/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games .

Убедитесь, что тильда не находится в кавычках ( PATH="~/bin:…" ), в противном случае она выступает сама по себе. Чтобы добавить каталог к ​​текущему значению PATH , вы можете использовать

 PATH=~/bin:$PATH 

В общем случае в оболочках, отличных от zsh, $PATH вне двойных кавычек ломается, когда значение содержит пробелы или другие специальные символы , но в задании безопасно. Однако при export вам нужно написать export PATH=~/bin:"$PATH" (хотя вам не нужен export с PATH поскольку он уже находится в среде). В zsh вам не нужны двойные кавычки, кроме случаев, когда переменная может быть пустой, но если вы устанавливаете PATH в .profile , она обрабатывается /bin/sh или /bin/bash .

Однако, если вы устанавливаете PATH в ~/.pam_environment , вы не можете использовать ~ или $HOME для поддержки своего домашнего каталога. Этот файл не обрабатывается оболочкой, это простой список строк NAME=value . Поэтому вам нужно написать пути в полном объеме.