По умолчанию Elvish (macOS, Homebrew) имеет базовое определение PATH:
~> echo $paths
[/usr/bin /bin /usr/sbin /sbin]
Я хотел бы добавить к нему элементы /usr/local/bin
и /usr/local/sbin
, но без написания литералов с нуля, например
set paths = [/usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/local/sbin]
Основной шаблон для более распространенных оболочек, конечно,
export PATH = "/usr/local/bin:/usr/local/sbin:$PATH"
Списки на эльфийском языке неизменяемы, поэтому я хотел бы сделать что-то вроде
set paths = paths + [/usr/local/bin /usr/local/sbin]
Но я ничего не нашел в документах, и мои попытки терпят неудачу:
~> set paths = paths + [/usr/local/bin /usr/local/sbin]
Exception: arity mismatch: assignment right-hand-side must be 1 value, but is 3 values
[tty 2]:1:1: set paths = paths + [/usr/local/bin /usr/local/sbin]
~> set paths = [$paths /usr/local/bin /usr/local/sbin]
Exception: path must be string
[tty 3]:1:5: set paths = [$paths /usr/local/bin /usr/local/sbin]
Вы можете изменить путь напрямую с помощью set E:PATH = "/usr/local/bin:/usr/local/sbin:"$E:PATH
или использовать conj
вот так set paths = (conj $paths /usr/local/bin /usr/local/sbin)
.
Благодаря Павло и его идее conj, я нашел еще один способ сделать это, поэтому я перечислю его здесь для полноты картины:
set paths = [/usr/local/bin /usr/local/sbin $@paths]
Это преимущество здесь — возможность добавлять значения к списку (conj
делает только добавление), что, очевидно, важно в общем случае, но также и при управлении $PATH
.