Добавление новой записи в переменную PATH в ZSH

58

Я использую zsh, и я пытаюсь добавить новую запись (/home/david/pear/bin) в переменную PATH, но я не знаю, как это сделать.

То, что меня смущает больше всего, это то, что нет ни одного ссылку на переменную PATH в моем файле ~/.zshrc, но выполнение echo $PATH возвращает:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Так что переменная PATH устанавливается где-то.

Теги:
zsh

4 ответа

66
Лучший ответ

Здесь:

export PATH=/home/david/pear/bin:$PATH
  • 8
    Спасибо, это работает, но PATH не изменяется постоянно. Если я закрою терминал и снова открою, мне придется снова установить PATH вручную. Знаете ли вы, как сделать это изменение постоянным?
  • 15
    хаха, забудь об этом, хотя я думал, что это была только консольная команда, но добавление этой строки в .zshrc помогло. Большое спасибо!
Показать ещё 7 комментариев
85

Собственно, использование ZSH позволяет использовать специальное сопоставление переменных среды. Поэтому вы можете просто:

# append
path+=('/home/david/pear/bin')
# or prepend
path=('/home/david/pear/bin' $path)
# export to sub-processes (make it inherited by child processes)
export PATH

Для меня это очень аккуратная функция, которая может быть распространена на другие переменные. Пример:

typeset -T LD_LIBRARY_PATH ld_library_path :
  • 11
    Хороший ответ. В моем случае ~/.zshrc происходит после .profile и перезаписывает все в .profile . Потребовалось время, чтобы вырвать мои волосы, чтобы понять это.
  • 1
    Случай добавления не нуждается в паренсе, если вы не добавляете более одного элемента. Это также часто не нуждается в кавычках. Таким образом, простой, короткий способ добавить
Показать ещё 3 комментария
7

Вы можете добавить к своему PATH минимально. Нет необходимости в круглые скобки, если вы не добавляете более одного элемента. Это также обычно не нужны кавычки. Итак, простой, короткий способ добавления:

path+=/some/new/bin/dir

Общее использование

Тогда общий шаблон для тестирования нового script/исполняемого файла будет выглядеть следующим образом:

path+=$PWD/.
# or
path+=$PWD/bin

Этот строчный синтаксис использует PATH как массив , но также влияет на его эквивалент партнера в верхнем случае, PATH (которому он "bound" через typeset).

(Обратите внимание, что нет : требуется/требуется как разделитель.)

Связанные cidbits

Рассмотрение PATH таким образом (как массив) также означает: не нужно делать rehash, чтобы получить новые исправленные команды.

Также рассмотрите vared path как динамический способ редактирования PATH и другие вещи.

Вас может интересовать только PATH для этого вопроса, но поскольку мы говорим об экспорте и массивах, отметим, что массивы обычно не могут быть экспортированы.

Вы можете даже предотвратить PATH от дублирования записей (Ссылаться на this и this):

typeset -U path
  • 0
    Разве это не должно быть 'path + =: / foo / bar'? (с двоеточием)
  • 1
    @andrewlorien Я обновил ответ подробностями о разделителе двоеточия.
Показать ещё 2 комментария
0

один вкладыш, без открытия ~/.zshrc файла

echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc

или

echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc

Чтобы увидеть эффект, сделайте source ~/.zshrc на той же вкладке или откройте новую вкладку

  • 1
    Отлично работал на OSX с оболочкой Zsh.
  • 1
    Работал как шарм!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню