如何将循环合并到 bash 别名中

How do I incorporate a loop into a bash alias

我正在尝试创建一个别名,它循环访问几个文件夹并运行构建命令,但我不断收到仅显示 for >.

的输出

这是我的 .zshrc 文件中的函数

recurse_build () {
    for src in `ls`; do 
        cd $src; build; cd ..
    done
}

我正在尝试创建一个别名

alias br='recurse_build'

但我最终得到以下提示

for > 

如有任何帮助,我们将不胜感激。

编辑:修复了函数中的语法错误。键入而不是复制粘贴是一个糟糕的案例

可能是右边缺少反引号,但是正在处理的输出 ls 通常是个坏主意。这有效

recurse_build(){
    for src in */; do
        cd "$src" && ./build && cd ..
    done
}

#TEST 
mkdir -p a b c 
echo 'echo $PWD:[=10=]' |tee a/build b/build c/build >/dev/null
chmod  +x a/build b/build c/build 


recurse_build

除了您的命令替换中缺少反引号外,这无论如何都是错误的遍历文件的方法。使用 glob 模式。

recurse_build () {
    for src in */; do
        pushd "$src" || continue   # Don't do anything if pushd fails
        build
        popd
    done
}

使用 pushdpopd 比必须记住要 return 到哪里要干净一点。