作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 .bash_profile 我有以下几行:
PATHDIRS="
/usr/local/mysql/bin
/usr/local/share/python
/opt/local/bin
/opt/local/sbin
$HOME/bin"
for dir in $PATHDIRS
do
if [ -d $dir ]; then
export PATH=$PATH:$dir
fi
done
$PATH
没有被设置。
echo
“如果目录存在”函数中的语句,我发现 if 语句的评估结果为假,即使对于明显存在的目录也是如此。
$PATH
像这样设置不正确:
/usr/bin:/bin:/usr/sbin:/sbin:
/usr/local/bin
/opt/local/bin
/opt/local/sbin
/Volumes/Xshare/kburke/bin
/usr/local/Cellar/ruby/1.9.2-p290/bin
/Users/kevin/.gem/ruby/1.8/bin
/Users/kevin/bin
最佳答案
与其他 shell 不同,zsh 在变量替换后不执行分词或通配。因此$PATHDIRS
扩展为包含变量值的单个字符串,而不是包含每个单独的以空格分隔的值的字符串列表。
使用数组是表达这一点的最佳方式(不仅在 zsh 中,而且在 ksh 和 bash 中)。
pathdirs=(
/usr/local/mysql/bin
…
~/bin
)
for dir in $pathdirs; do
if [ -d $dir ]; then
path+=$dir
fi
done
pathdirs
稍后,您不妨内联编写它:
for dir in \
/usr/local/mysql/bin \
… \
~/bin
; do
if [[ -d $dir ]]; then path+=$dir; fi
done
path
数组,然后选择存在的数组。
path+=/usr/local/mysql/bin
…
path=($^path(N))
N
glob qualifier仅选择存在的匹配项。添加
-/
到限定符列表(即
(-/N)
或
(N-/)
),如果您担心其中一个元素可能不是目录或指向某个目录的符号链接(symbolic link)(例如损坏的符号链接(symbolic link))。
^
parameter expansion flag确保 glob 限定符分别应用于每个数组元素。
N
限定符仅在元素存在时添加元素。请注意,您需要进行通配,所以
path+=/usr/local/mysql/bin(N)
行不通。
path+=(/usr/local/bin/mysql/bin(N-/))
关于zsh - 如何在 ZSH 中编辑路径变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9347478/
我是一名优秀的程序员,十分优秀!