我目前正在使用此函数为zsh中的所有子文件夹运行命令。
forsubdirs() {
for dir in *; do
(cd ${dir} && echo $fg_bold[yellow]${PWD##*/}$reset_color && $@ && echo '\n')
done
}
我这样使用它:forsubdirs git pull
但问题是:它不适用于别名。如何为所有子文件夹执行任意ZSH命令(包括用“&”或“;”分隔的别名和命令列表)?
答案 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
。