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

如何将循环合并到bash别名中,bash,for-loop,alias,Bash,For Loop,Alias,我正在尝试创建一个别名,该别名在几个文件夹中循环并运行一个build命令,但我一直得到一个只显示>的输出 这是我在.zshrc文件中的一个函数 recurse_build () { for src in `ls`; do cd $src; build; cd .. done } 我正试着做一个别名 alias br='recurse_build' 但我最终得到以下提示 for > 任何帮助都将不胜感激 编辑:修复了函数中的语法错误。输入而不是粘贴副

我正在尝试创建一个别名,该别名在几个文件夹中循环并运行一个build命令,但我一直得到一个只显示>的输出

这是我在.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:$0' |tee a/build b/build c/build >/dev/null
chmod  +x a/build b/build c/build 


recurse_build

除了在命令替换中缺少反引号外,无论如何,这是迭代文件的错误方式。使用全局模式

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

使用pushd和popd比必须记住返回到哪里要干净一点

为什么不使用函数而不是别名呢?顺便说一句,函数中有语法错误。为什么要定义函数并将其映射到别名?直接使用函数all你的函数定义被破坏为当前发布的函数;在@Inian分析它,我不认为只运行该函数,所以我使用了别名。当我运行这个函数时,它就工作了。修复了缺少的反引号,我不知道用这种方法在bash中迭代文件。我只是尝试了你建议的语法,但我仍然得到for>提示,而不是让它实际进行构建。让我看看能不能调试一下。编辑:他直接发挥作用,而且似乎有效。它在别名中不起作用,但我可以处理调用函数的问题。