使用通配符在.zshrc中获取多个文件

时间:2013-02-03 22:13:57

标签: macos terminal alias zsh

我通过“oh my zsh”使用z shell。我想从我的.zshrc文件中获取多个别名文件,这样我就可以保持井井有条。我已经使用.alias_为别名文件添加了前缀,因此我可以通配符加载它们。但是,对source ~/.alias_*的调用只会加载第一个文件。如何编写脚本以获取多个文件?

文件名示例:.alias_git.alias_local.alias_server ...

2 个答案:

答案 0 :(得分:5)

选项1

你可以使用for循环:

for file in ~/.alias_*; do
    source "$file"
done

选项2

另一种选择是构建一个包含所有要获取的文件的数组,然后使用for循环遍历数组。

typeset -a aliases

aliases+="~/.alias_foo"
aliases+="~/.aliases_bar"
# etc...

for file in $aliases[@]; do
    if [[ -a "$file" ]]; then
        source "$file"
    fi
done

这实际上可以非常有效地制作a well organized zshrc setup

答案 1 :(得分:2)

更具有ZSH特定的方式(需要setopt EXTENDED_GLOB):

alias_src=(
.alias_git
.alias_local
.alias_server
)
for f ($^alias_src(.N)) source $f
unset alias_src

前缀^具有将后续的glob修饰符分别应用于数组的每个元素的效果。

尾随(.N)具有以下效果:

  • .:仅匹配文件
  • N:暂时setopt NULL_GLOB,这意味着只有实际存在的数组元素才会保留在数组中