对所有子文件夹运行任意zsh命令

时间:2017-03-31 01:56:09

标签: zsh

我目前正在使用此函数为zsh中的所有子文件夹运行命令。

forsubdirs() {
   for dir in *; do
     (cd ${dir} && echo $fg_bold[yellow]${PWD##*/}$reset_color && $@ && echo '\n')
   done
}

我这样使用它:forsubdirs git pull 但问题是:它不适用于别名。如何为所有子文件夹执行任意ZSH命令(包括用“&”或“;”分隔的别名和命令列表)?

1 个答案:

答案 0 :(得分:1)

为了能够将复杂命令作为参数传递,您需要引用;&等句法元素。然后需要使用eval命令显式评估参数。例如:

forsubdirs () {
    for dir in *(/) ; do
        ( cd $dir && echo $fg_bold[yellow]${PWD##*/}$reset_color && eval $@ && echo '\n' )
    done
}

forsubdir 'ls -1 | sed "s/^/    /"'

另外,我建议使用*(/)代替普通*。它只匹配目录,因此该函数甚至不会尝试在常规文件上运行cd