Есть ли в zsh простой способ добавить каталог в мой путь, только если его еще нет? (или, в более общем случае, любая переменная окружения). Я пробовал:
PATH+=/my/directory
... но если он выполняется дважды, он добавляется дважды.
Есть ли в zsh простой способ добавить каталог в мой путь, только если его еще нет? (или, в более общем случае, любая переменная окружения). Я пробовал:
PATH+=/my/directory
... но если он выполняется дважды, он добавляется дважды.
Ответы:
In zsh
$PATH
привязан (см. typeset -T
) К $path
массиву. Вы можете заставить этот массив иметь уникальные значения с помощью:
typeset -U path
А затем добавьте путь с помощью:
path+=(~/foo)
Не нужно беспокоиться, если он уже был там.
Чтобы добавить его в начало, сделайте:
path=(~/foo "$path[@]")
или:
path[1,0]=~/foo
если ~/foo
был уже в $path
том, переместит его на фронт.
typeset -Ug path
? Когда я использую typeset -U path
в своем ~/.zshrc
файле, я всегда получаю сообщение об ошибке, когда во время работы zshrc ничего не находится в пути
-g
заключается в том, чтобы избежать ограничения области, но в ~/.zshrc
области уже глобально. Кроме того, я никогда не видел zsh
жалобы на пустоту $PATH
(за исключением, конечно, ошибки команды не найдены).
Вы должны будете сделать что-то вроде:
if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi
Это работает только в том случае, если newpath
разграничены двумя ':', необходимо учитывать случаи, когда оно находится в начале или в конце аналогично.
Urgh.
echo "$PATH"
: всегда ставьте двойные кавычки вокруг переменных ). case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac