在Elvish shell中扩展列表(修改$PATH)

tct7dpnv  于 2023-05-01  发布在  Shell
关注(0)|答案(2)|浏览(87)

默认情况下,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]
rmbxnbpk

rmbxnbpk1#

您可以直接使用set E:PATH = "/usr/local/bin:/usr/local/sbin:"$E:PATH修改路径,也可以像这样使用conj

nzk0hqpo

nzk0hqpo2#

感谢Pavlo和他们的conj概念,我找到了另一种方法,为了完整起见,我将在这里列出:

set paths = [/usr/local/bin /usr/local/sbin $@paths]

这里的优点是能够 prepend值到列表中(conj只做追加),这在一般情况下显然很重要,但在管理$PATH时也很重要。

相关问题