使用xargs for目录的bash cmd的别名失败



我使用一个命令通过搜索一个公共文件(Jenkinsfile(来收集我的所有项目,因为我想在每个项目目录中执行一个命令:

find . -name 'Jenkinsfile' | sed s/Jenkinsfile// |  xargs -L 1 bash -c '(cd $0 && git branch)'

为了缩短它以备将来使用,我尝试为它创建一个别名,如下所示:

alias fgb="find . -name 'Jenkinsfile' | sed s/Jenkinsfile// |  xargs -L 1 bash -c 'cd $0 && git branch'"

但现在我只收到这样的错误消息:

./shared/authorization-provider/: line 0: cd: /usr/bin/bash: No such file or directory

怎么了?

编辑:

我找到了一个解决方案:

alias fgb="find . -name 'Jenkinsfile' | sed s/Jenkinsfile// |  xargs -I {} bash -c 'cd {} && pwd && git branch' "

正如Kamil所建议的,您应该尝试使用函数,而不是或多或少过时的别名。find足以满足您的需求:

fgb() {
find . -name 'Jenkinsfile' -execdir 'git branch' ;
}

-execdir从找到匹配文件的目录中运行其命令参数。

怎么了?

$0位于"引号内,因此它被扩展到/usr/bin/bashcd $0->cd /usr/bin/bash->no such file or dir

长达千年的建议是:使用函数,而不是别名。写一个函数而不是别名。

fgb() {
find . -name 'Jenkinsfile' | sed s/Jenkinsfile// |  xargs -L 1 bash -c 'cd $0 && git branch'
}

相关内容

  • 没有找到相关文章

最新更新