使用多行语法将路径添加到 PATH

使用多行语法将路径添加到 PATH

据我了解,向PATH环境变量添加路径的常用方法是连接由:字符分隔的路径。

例如,如果我想向其添加三个路径/my/path/1,/my/path/2/my/path/3,我必须按如下方式执行:

PATH=$PATH:/my/path/1:/my/path/2:/my/path/3

这不容易阅读。

有没有办法定义或者添加PATH使用变量的路径多行语法?也许使用数组?我正在寻找这样的东西:

PATH = 
$PATH
/my/path/1
/my/path/2
/my/path/3

如果有特定于 shell 的有趣解决方案,我正在 zsh 中寻找解决方案。

答案1

根本不是一个有趣的解决方案,但非常便携:

PATH=${PATH}:/my/path/1
PATH=${PATH}:/my/path/2
PATH=${PATH}:/my/path/3

答案2

在zsh中,$path是一个数组:

path=(
    $path
    ~/.local/bin
    ~/.gem/ruby/2.0.0/bin
)

注意:path都是小写。

答案3

我不知道它在 zsh 中是否有效,但它在 bash 中有效:

PATH=$(paste -d ":" -s << EOF 
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF
)

编辑甚至更短:

PATH=`paste -d ":" -s << EOF 
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF`

并且不产生进程:

new_path=(
"$PATH"
/my/path/1
/my/path/2
/my/path/3)
OLD_IFS="$IFS"
export IFS=":"
PATH="${new_path[*]}"
export IFS="$OLD_IFS"

双引号对于$PATH、和很重要$IFS,可以在变量中保留空格并避免 IFS 的 shell 解释。${new_path[*]}$OLD_IFS

更新2使用 sed 进行注释和空行管理:

PATH=`sed -e '/^#/'d -e '/^$/'d << EOF | paste -d ":" -s 
$PATH
/my/path/1
# This is a comment.
/my/path/2

/my/path/3
EOF`

注释字符必须是该行的第一个字符,空行应该完全为空。要在注释之前和空行上管理空格和制表符,请改用sed -e '/^[ \t]*#/'d -e '/^[ \t]*$/'d(要测试的制表符,因为它可能特定于 sed 实现)。

答案4

在 zsh 中,如果您要在路径末尾添加目录:

path+=/my/path/1
path+=/my/path/2
path+=(/path/to/app/{i386,share}/bin)

便携:如何正确添加路径到PATH?

您可以使用全局限定符排除不存在的目录或符号链接的条目。这可能是理想的,也可能不是理想的,具体取决于您是否希望稍后在会话期间添加目录(例如,如果它们位于远程文件系统上)。您不能使用path+=/my/path语法来做到这一点,因为右侧位于字符串上下文中,因此不会进行通配;您可以这样做,path+=(/my/path)因为每个数组元素都在列表上下文中展开。

path+=(/path/to/app/{i386,share}/bin(-/N))

相关内容